Я использую этот код, чтобы установить файл cookie, а затем посмотреть, существуют ли они
setcookie("token", "value", time()+60*60*24*100, "/"); setcookie("secret", "value", time()+60*60*24*100, "/"); setcookie("key", "value", time()+60*60*24*100, "/"); if (!isset($_COOKIE['token']) || !isset($_COOKIE['secret']) || !isset($_COOKIE['key'])) { // do something because one of the cookies were not set }
Несмотря на то, что все три файла cookie были установлены в моем браузере, он все еще запускает оператор if()
. Из-за процесса устранения я обнаружил средний файл cookie !isset($_COOKIE['secret'])
похоже, вызывает выполнение if()
хотя secret
cookie был установлен в моем браузере. Сценарий говорит, что он не был установлен, когда я смотрю на свой браузер, и он был установлен. Можете ли вы подумать о какой-либо причине, почему php говорит, что он не был установлен?
setcookie
определяет только cookie для отправки вместе с остальными HTTP-заголовками, и к ним можно получить доступ на следующей загрузке страницы с помощью $_COOKIE
. С вашим кодом заголовки HTTP не отправляются.
Вам просто нужно setcookie
когда cookie не установлен. Подобно:
if (!isset($_COOKIE['token'])) { setcookie("token", "value", time()+60*60*24*100, "/"); }
использование
if(array_key_exists($_COOKIE, 'secret') && strlen($_COOKIE['secret']) > 0) { }