Почему мои куки не устанавливаются?
У меня есть следующая функция PHP:
И тогда я получаю печенье:
echo $_COOKIE[‘username2’]; exit();
(Я только положил exit() в целях отладки)
Единственная проблема, это выходит пустым. Есть идеи?
ОБНОВИТЬ:
Вот как называется функция:
Я не включил все if() заявления, чтобы сэкономить место.
Решение
попробуйте добавить путь = /, чтобы файл cookie работал со всем сайтом, а не только с текущим каталогом (который раньше меня поймал)
также убедитесь, что файл cookie выводится первым
как советовали в руководстве по php (это меня уже застало врасплох)
Как и другие заголовки, куки должны быть отправлены до любого вывода из вашего
скрипт (это ограничение протокола).
Другие решения
Почему у вас возникла эта проблема
Проблема заключается в том, что setcookie () не устанавливает куки немедленно, он отправляет заголовки, поэтому браузер устанавливает куки. Это означает, что для текущей загрузки страницы setcookie () не будет генерировать $_COOKIE ,
Когда браузер позднее запрашивает страницу, он отправляет куки в заголовках, чтобы PHP мог получить их в виде $ _COOKIE.
Просто, старый решение
О решениях, очевидных:
Я создал класс, Cookie , которая решает проблемы, которые разделяют setcookie () и $ _COOKIE:
Тогда вы можете использовать это так:
И, конечно, вы должны передать это. Гораздо лучше, чем глобальные.
Вот общий синтаксис setcookie
Посмотрите на третий аргумент, если вы не установите его, скрипт перенесет его в текущий рабочий каталог. Так что если вы установили cookie без указания пути в a.com/b/setcookie.php cookie не будет доступен для a.com/checkcookie.php , Что вы делаете, это установка cookie в подпапку и перенаправление в родительскую папку, посмотрите на ../ где это не доступно, следовательно, проблема. Как этого избежать? Обычная процедура — указать путь, который / , в вашем случае запас / как четвертый абзац Пятый аргумент для вашего куки-файла установит его безопасность. http://www.php.net/setcookie есть больше объяснений. Это должно исправить вашу проблему. Установка пути к домену domain.com , сделает файл cookie доступным для всех domain.com но не для something.domain.com , Установите значение домена в .domain.com посмотрите на точку, предшествующую domain.com, сделайте ее доступной через anything.domain.com , НТН!
Думаю, я бы добавил еще одну возможную причину, по которой cookie может не устанавливать или показывать случайное функциональное поведение.
Следующий случай может быть применим к некоторым программистам, имеющим, как представляется, иллюзорную проблему с настройками файлов cookie в результате неправильного использования header_remove ();
Если вы пытаетесь установить cookie до призвание header_remove () тогда cookie никогда не будет создан, потому что вы также уничтожили заголовок, который был установлен для создания cookie, до того, как инструкция была буферизована клиенту.
Вы можете обнаружить, что ваш файл cookie внезапно работает по неизвестной причине:
При первом запуске вы устанавливаете cookie и вообще не вызываете header_remove (). Затем при втором запуске вы вызываете header_remove (), вы обнаружите, что ваш cookie теперь всегда установлен.
То же самое применимо и в том случае, если вы попытаетесь изменить значение cookie перед header_remove (), вы снова потерпите неудачу, потому что он уничтожит изменения, которые вы пытаетесь внести, прежде чем они будут фактически буферизованы для пользователя.
Вы должны установить куки и любые другие заголовки по этому вопросу после header_remove (), а не до.
Если вы использовали header_remove () для намерения изменить иерархию кодов ответов HTTP для сценариев DOM, вы можете быстро разрешить этот конфликт стирания заголовка файла cookie, используя следующее для явной очистки только кодов ответов:
Это требует, чтобы вы вызывали эту функцию до любого вывода, включая и теги, а также любые пробелы.
Источник
Setcookie wordpress не работает
Вы не можете установить cookie в функции шорткода, потому что заголовки уже были отправлены WordPress. setcookie () определяет cookie, который будет отправлен вместе с остальными заголовками HTTP, поэтому, если вы хотите установить значение cookie, его нужно добавить в ловушку до или во время ловушки send_headers .
Пожалуйста, используйте функцию ob_start(); вверху файла и функцию ob_end_flush() после кода, где вы хотите использовать куки.
Функция ob_start . Включает буферизацию вывода.
Функция ob_end_clean: очищает буфер и закрывает буферизацию.
Спасибо за все ваши ответы! OB_START не работает для меня, возможно, в моем коде была проблема, но я не мог ее использовать. Пост администратора также был отличным способом ее решить, но для меня было проще изменить код меньше, и я использовал add_action внутри своей функции.
Итак, в основном я добавил новую функцию, которая должна была выполняться перед заголовком, и он проверял, была ли заполнена форма или нет. Если SYMBOL textbobx был завершен, я установил cookie. Также я установил все мои куки с неважным значением, чтобы в процессе не было ошибок. Так что если у вас есть проблема, кроме установки cookie внутри шорткода и функции, которая проверяет набор текстового поля. Запустите эту функцию, используя INIT перед заголовком!
Спасибо всем, потому что это мой вывод из всех ваших ответов и идей и ссылок!
Источник
PHP — setcookie(); не работает
Я сделал логин, который устанавливает cookie со значением вменяемого адреса электронной почты, поэтому в глобальном.php-файл, он хранит массив данных пользователей с помощью:
cookie не устанавливается, я знаю это, потому что я сделал тестовый файл:
просто пустая страница.
код входа (где установлен файл cookie):
4 ответов
вы должны установить cookies до все заголовки отправляются.
setcookie () определяет файл cookie для отправки вместе с остальными заголовками HTTP. Как и другие заголовки, куки должны быть отправлены до любого вывода из скрипта (это ограничение протокола). Это требует, чтобы вы размещали вызовы этой функции до любого вывода, включая и теги, а также любые пробел.
это означает, что вам нужно будет заглянуть в буферизация вывода если вы хотите использовать этот код как есть.
в зависимости от содержания global.php этот может работа для вас. Все, что я сделал, это удалить любой вывод до setcookie() называется. Если global.php содержит любые пробелы или вывод HTML в нем, это не будет работать:
просто хотел отметить, у меня была проблема с setcookie не работает. Когда я исследовал файл был в кодировке UTF-8 с BOM. Когда я перекодировал его как UTF-8 без BOM setcookie работал нормально, поэтому BOM был написан до того, как мой первый тег php был обнаружен. Я думаю, что включение буферизации в моем php.ini-файл, вероятно, тоже исправлю.
кто-то может в конечном итоге найти эту информацию полезной.
У меня была еще одна проблема с обновлением cookie с помощью функции setcookie.
поэтому я установил строку cookie из массива с помощью функции сериализации php. С этого момента я не смог обновить, что функция cookie — setcookie просто не работает, wheather устанавливает сериализованную строку или любую другую простую строку.
затем я установил другой файл cookie с новым ключом cookie, на этот раз данные были закодированы с помощью функции json_encode. На этот раз я смог установить cookie и обновите его: -)
У меня была такая же проблема и оказалось, что это было вызвано тем, что домен, который я проходил в функции другой порт (что не допускается).
Источник
Почему не устанавливаются cookie в WordPress?
Пишу в footer.php в теме wordpress:
Обновляю страницу несколько раз, каждый раз выдаёт null. Пробовал по совету из интернета делать так:
Результат тот же. При этом внутри ajax:
всё отлично работает, но только внутри ajax. Если попытаться получить $_COOKIE[‘cartQuantity’] на странице, то опять же выдаст null.
- Вопрос задан более двух лет назад
- 646 просмотров
setcookie() задает cookie, которое будет передано клиенту вместе с другими HTTP-заголовками. Как и любой другой заголовок, cookie должны передаваться до того как будут выведены какие-либо другие данные скрипта (это ограничение протокола). Это значит, что в скрипте вызовы этой функции должны располагаться до остального вывода, включая вывод тегов и , а также пустые строки и пробельные символы.
Из-за этого не работает в footer.php. Если бы у вас был включен режим отладки и вывод ошибок, то вы бы увидели что-то типа:
Далее, пример с хуком init работает, но есть 2 нюанса. Во-первых, у вас ошибка — константы DAYS_IN_SECONDS не существует, должна быть DAY_IN_SECONDS. Далее, опять идем в документацию по поводу этого параметра (жирным выделил то, что важно):
expires
Время, когда срок действия cookie истекает. Это метка времени Unix, то есть количество секунд с начала эпохи. Другими словами, желательно задавать это время с помощью функции time(), прибавляя время в секундах, через которое срок действия cookie должен истечь. Либо можно воспользоваться функцией mktime(). time()+60*60*24*30 установит срок действия cookie 30 дней. Если задать 0 или пропустить этот аргумент, срок действия cookie истечет с окончанием сессии (при закрытии браузера).
На языке кода это будет:
Во-вторых, из той же документации (жирным выделил то, что важно):
После передачи клиенту cookie станут доступны через массив $_COOKIE при следующей загрузке страницы. Значения cookie также есть в $_REQUEST.
То есть, ваше var_dump($_COOKIE[‘testing’]); сработает только после перезагрузки, а при первой попытке — NULL и: .
Источник
WordPress.org
I’m using Ninja forms and am trying to make a plugin where they have to log into an account so they can register for events. I have the page with a form that asks for their user name and password. When they submit the form, I check their creds and if everything is okay, they get redirected to the same page where I have code that is hooked into the init that is suppose to set some cookies and then redirects. It is redirecting but I can’t get the cookies to set. I’ve been at this for about four hours now and can’t figure out what I’m doing wrong. Any help is appreciated!
When it gets redirected, I get Notice: Undefined index: account_id in /home/dpiadmim/register.dynamicpathwaysinc.com/wp-content/plugins/ninja-forms-dpi-registration-system/ninja-forms-dpi-registration-system.php on line 17 NULL
- This topic was modified 2 years, 4 months ago by brad3260 .
- This topic was modified 2 years, 4 months ago by Steve Stern (sterndata) .
you cannot set cookies outside the domain where the php code is running.
If I’m right, it creates a setcookie code outside the wordpres context, that is, it creates a php code where you set a cookie for the external domain and from the external domain checks if that cookie exists.
What do you mean by external domain? I’m setting the cookie for the same domain that the code is running. I’ve even tried omitting the domain and path.
Do you have any piece of code before what you have posted here?
No echo or print statements or any lines that send anything to the browser
You may not have sent anything, but WP could have. Without more context it’s hard to say. set_cookie() should be called around the point when “send_headers” action fires. Alternately, use JavaScript to set cookies. Then you can do so at any time.
setcookie(‘account_id’,$user_info[‘id’],time()+3600,’/’,’www.domain.com’);
$_COOKIE will be created after the next interaction.
Cast int for account_id or false on fail
Try setting the cookie using the base domain, as follows:
Also, if your PHP script is setting the cookie and then trying to read it later in the script, it will not work. The newly-set cookie is not available until the redirected page is loaded.
I made a conversion from wordpress php to pure php … setcookie creates the right header to send and then the browser will be free to accept or not this command, the next time the browser sends the cookie does not generate warring while if it does it is because it does not exist with the isset check function when it exists so you don’t get an error.
Only if the url starts and ends exactly like this http://www.register.dynamicpathwaysinc.com/
Thank you everyone for the suggestions, I’m still unable to get it to work so I’m thinking I am going to try javascript. I know I would need a js function that looks something like the following
However, how would I get the values from my PHP into the function call?
you cannot directly call the cookie because initially it does not exist you have tried as suggested by me and that your function can also return false?
Well, turns out my code was working, I had an SQL issue. Sorry about that but thank you everybody for the assistance!
Источник