setcookie не удаляет печенье
Я действительно не знаю, в чем проблема здесь.
У меня есть скрипт с именем "login.php", который отлично работает. Он вызывается с помощью AJAX, и, если он успешно возвращается, страница обновляется, и пользователь входит в систему. На этой странице устанавливается cookie
setcookie("main", $row[0], time() + 3600, "/")
Тогда у меня есть скрипт с именем "logout.php". Он называется так же (AJAX, а затем обновление страницы). Он имеет только две строки:
<?php
setcookie("main", "", time() - 3600, "/");
echo "Done";
?>
Вызов его из страницы не работал, поэтому я просто загрузил logout.php в браузере. Вывод был "сделан", но проверка моих файлов cookie в Chrome показала, что для этого файла cookie все еще установлено значение "1" (равное $row[0]), и срок его действия истекает в момент времени, указанный в login.php
login.php и logout.php находятся в одной и той же папке, корневой директории, которая является той же самой папкой, что и все остальное.
Ранее это работало, но единственные изменения, которые я сделал, - сделать строку заголовка на веб-сайте собственным файлом (все еще в корневом каталоге) и добавили функцию JavaScript для кнопки "Выход", которая является просто вызовом AJAX. и некоторые эффекты наведения jQuery, и сделайте его собственным файлом сценария, который находится в папке _js. Но я вообще не менял logout.php, поэтому он все равно должен работать, когда я перехожу к нему напрямую, верно? Что-то не так с моей командой setcookie, или какая другая проблема может быть причиной этого?
РЕДАКТИРОВАТЬ: я попытался установить срок его действия через 100 секунд вместо -3600, а затем попытался изменить его имя, чтобы я мог распознать его как совершенно отдельный файл cookie. Никто из них этого не сделал. Печенье просто не устанавливается вообще.
РЕДАКТИРОВАТЬ 2: я вернулся к последнему коммита, и все снова работает. Я не знаю, почему реорганизация моего сайта путем создания новых файлов (logout.php вообще не изменяется) делает определенный сценарий неспособным создавать файлы cookie.
1 ответ
Cookies должны быть установлены до того, как какой-либо контент отправляется клиенту. Убедитесь, что вы ничего не отправляли клиенту, прежде чем вызвать setcookie, так как это на самом деле Set-Cookie
заголовок возвращается через запрос.
Кое-что как пробел во включаемом файле может испортить это. (Вы сказали, что работали с другими файлами, проверьте, что ничего из включенного не имеет ничего, например, отладочного эха или пробелов вне вашего <?php ... ?>
скобки)
Как правило, если у меня есть файл, который состоит исключительно из кода PHP, я включаю только открывающий тег (<?php
) и освобождают последний. PHP по-прежнему будет анализировать и запускать, но это позволяет избежать любых пробелов в конце файла, которые могут стать проблематичными. например
mycodefile.php
<?php
define('...', ...);
function ...(){ }
Также вы упомянули использование Chrome. Откройте ваш отладчик в Chrome (Ctrl+Shft+I) и нажмите вкладку Сеть. Затем найдите ваш вызов для выхода из системы и выберите его, затем нажмите " Заголовки" и убедитесь, что ваш файл cookie очищается. (также вы можете щелкнуть Ресурсы и посмотреть под Cookies, чтобы просмотреть любой набор.