Функция setcookie не работает с параметром '/', но работает без него

11 янв. 2015 г., 18:58:10
Просмотры: 19K
Голосов: 0

У меня возникла очень странная проблема. У меня есть этот код в файле functions.php. Я следовал инструкциям и поместил этот код в functions.php, который находится в папке моей темы: wp-content/themes/u-design/functions.php. Для справки, моя тема - u-design.

add_action('init', 'setmyCookie');
function setmyCookie(){
    //if(!isset($_COOKIE['myCookie'])){

        setcookie('myCookie', $_GET['test'], time() + 63072000, '/');
    //}
}

Этот код должен получать значение из query string и помещать его в cookie, например:

www.mysite.com/?test=test

Однако это не работает. Но когда я изменяю код на:

add_action('init', 'setmyCookie');
function setmyCookie(){
    //if(!isset($_COOKIE['myCookie'])){

        setcookie('myCookie', $_GET['test'], time() + 63072000);
    //}
}

Cookie устанавливается! Почему так происходит?

Сейчас, со вторым методом, хотя cookie и устанавливается, я не могу использовать его, так как $_COOKIE['test'] не возвращает значение из cookie. Судя по найденной информации, это происходит потому, что cookie устанавливается только для текущего пути. Чтобы использовать $_COOKIE['myCookie'], нужно установить cookie так, чтобы она была доступна для всего домена. Однако если я делаю это, как в первом методе, cookie вообще не устанавливается!

Кто-нибудь знает, почему это происходит и как это исправить? Спасибо.

mwh
mwh
1
Комментарии

Ваш код вызывает фатальные ошибки у меня, вероятно, из-за имени функции. Это реальное имя, которое вы пытаетесь использовать?

Rarst Rarst
11 янв. 2015 г. 19:59:57

О нет, я изменил имя функции. На самом деле я использую другое имя. Отредактировал пост, чтобы сделать его понятнее. Извините!

mwh mwh
11 янв. 2015 г. 20:25:57

Что произойдет, если использовать константу COOKIEPATH?

Milo Milo
11 янв. 2015 г. 20:36:17

Это общий вопрос по PHP, я не вижу, где здесь задействован WordPress. В любом случае, ваш код работает идеально. Вы не можете использовать $_cookie['test'], потому что имя cookie не "test", а "mycookie".

cybmeta cybmeta
11 янв. 2015 г. 21:53:35

Я перепроверил свой код, и это была просто опечатка, когда я набирал вопрос. Приношу извинения, я использовал $_cookie['myCookie'], и это не работало, поэтому мой вопрос остается актуальным. Также я проверил, установлен ли cookie, и он не установлен. Разве это не указывает на ошибку в методе setcookie? Строка кода, которая включает '/' в качестве четвертого параметра, не работает, в то время как строка кода только с тремя параметрами (второй пример) успешно устанавливает cookie.

mwh mwh
11 янв. 2015 г. 22:21:34

Возможно, это не проблема WordPress, но, как говорится в каждом руководстве по установке cookie в PHP, и как вы тоже утверждаете, что код должен работать идеально, я не был уверен, есть ли что-то в WordPress, что мешает его работе. Я протестировал setcookie и $_cookie напрямую в пустом PHP-файле, содержащем только эти два метода, и там всё работает нормально, поэтому я рассматриваю возможность, что ошибка кроется в другом месте.

mwh mwh
11 янв. 2015 г. 22:33:37

проверьте эту ссылку http://allinonescript.com/questions/8890115/php-cookies-are-not-being-set

Vadivel S Vadivel S
4 окт. 2017 г. 09:08:35
Показать остальные 2 комментариев