2012-04-17 3 views
3

Я действительно не знаю, в чем проблема.setcookie не удаляет cookie

У меня есть сценарий под названием «login.php», который отлично работает. Это называется с AJAX, и если она возвращает успешно, страница обновляется и пользователь вошел в систему. Куки устанавливается на этой странице с

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, или что другая проблема может вызвать ее?

EDIT: Я попытался установить его на 100 секунд вместо -3600, а затем попытался изменить его имя, чтобы распознать его как полностью отдельный файл cookie. Ни один из них не появился. Файл cookie просто не устанавливается.

EDIT 2: Я вернулся к последнему фиксации, и все снова работает. Я не знаю, почему реорганизация моего сайта, создавая некоторые новые файлы (logout.php не изменяется вообще) делает определенный скрипт неспособным создавать куки.

+0

Вы уверены, что вы вызываете на том же домене? Может быть, вы установите печенье на www.domain.com и вы хотите удалить он на domain.com? –

+0

Я установил их как на «/», так что это должно быть одно и то же, верно? Они оба в одной папке. –

+0

Нет, это путь, домен может быть другим. установите cookie на www.domain.com, чем он не будет доступен с сайта domain.com, хотя они являются одним и тем же доменом, но в теории нет. Поэтому, если вы настроили домен как www.domain.com/login.php, чем скрипт php logout должен быть вызван с www.domain.com/logout.php не domain.com/logout.php –

ответ

3

Куки должны быть установлены до того, как любой контент отправится клиенту. Убедитесь, что вы ничего не отправили клиенту, прежде чем вызывать setcookie, поскольку это фактически заголовок Set-Cookie, возвращающийся по запросу.

Что-то не меньше, чем пробел во включенном файле, может испортить это. (Вы сказали, что работали над другими файлами, убедитесь, что ничего не включено, есть что-то вроде отладочного эха или пробела вне ваших скобок <?php ... ?>)

Как правило, если у меня есть файл, который является исключительно PHP-кодом Я включаю только открывающий тег (<?php) и освобождаю последний. PHP все равно будет анализировать и запускать, но это позволяет избежать любых пробелов в конце файла, которые могут стать проблематичными. например

mycodefile.php

<?php 

    define('...', ...); 

    function ...(){ } 

Кроме того, вы упомянули, используя хром. Откройте отладчик в хроме (Ctrl + SHFT + я) и нажмите на вкладкуNetwork. Затем найдите свой выход из системы и выберите его, затем щелкните Заголовки и убедитесь, что ваш файл cookie очищается.(Также вы можете нажать Ресурсы и посмотреть под Cookies для просмотра любого набора.

+0

Да, я согласен, если перед тегом

+0

logout.php - это только эти две строки, поэтому я не думаю, что что-то было отправлено клиенту до того, как будет вызван setcookie, если я перейду непосредственно на эту страницу. Нет никаких пробелов, просто вкладка перед setcookie. –

Смежные вопросы