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, чтобы просмотреть любой набор.

Другие вопросы по тегам