Cookie не будет сброшен - PullRequest
2 голосов
/ 23 марта 2010

ОК, я в тупике и смотрю на это часами.

Я устанавливаю файл cookie в /access/login.php со следующим кодом:

setcookie('username', $username, time() + 604800, '/');

Когда я пытаюсь выйти из системы, которая находится в /access/logout.php (и переписана в / access / logout), файл cookie не будет сброшен.Я пробовал следующее:

setcookie('username', false, time()-3600, '/');

setcookie('username', '', time()-3600, '/');

setcookie('username', '', 1, '/');

Я также пытался напрямую нажать /access/logout.php, но он не работает.

Ничего не отображается в логах php.

Есть предложения?Я не уверен, что я что-то упустил или что происходит, но уже несколько часов смотрел на этот код и пытался отлаживать.

Ответы [ 9 ]

1 голос
/ 23 марта 2010

Как вы определяете, если он не установлен?Имейте в виду, что setcookie () не удалит его из суперглобала $ _COOKIE текущего скрипта, поэтому если вы вызовите setcookie (), чтобы сбросить его, а затем сразу же print_r($_COOKIE);, он все равно будет отображаться, пока вы не обновите страницу.

Попробуйте вставить javascript:alert(document.cookie); в браузер, чтобы убедиться, что у вас не сохранено несколько файлов cookie.Очистите все файлы cookie для домена, с которым вы работаете, чтобы убедиться, что вы начинаете с нуля.Также ini_set(E_ALL);, чтобы убедиться, что вы не пропустите ни одного уведомления.

1 голос
/ 15 мая 2012

Кажется, проблема с сервером.Мой последний домен был довольно расслаблен в обработке ошибок PHP, в то время как новый домен показывает каждую ошибку.Я использую оба сайта рядом, а старый удаляет куки, как и должно быть.

0 голосов
/ 24 марта 2017

У меня была такая же проблема;Я выхожу (и я выхожу из системы), вручную перезагружаю index.php и затем я снова захожу в систему.Затем, когда я выхожу из системы, я правильно выхожу из системы.

Выход из системы - простая ссылка (index.php? Task = logout).Задача удаляет пользователя из сеанса и «удаляет» (установить значение '' и установить срок действия в прошлом) cookie, но index.php будет считывать маркер авторизации пользователя из cookie сразу после этой (или всей) задачи (как при обычных операциях).Который перезагрузит пользователя.После загрузки страницы браузер не покажет cookie для токена авторизации.Поэтому я подозреваю, что файл cookie записывается после завершения загрузки страницы.

Моим простым решением было не читать файл cookie, если задание было установлено на выход из системы.

0 голосов
/ 29 мая 2013

У меня была похожая проблема.

Я обнаружил, что по какой-то причине вывод чего-то из logout.php фактически заставил его удалить cookie:

echo '{}';
setcookie('username', '', time()-3600, '/');
0 голосов
/ 09 апреля 2011

Простой и удобный способ, это использовать следующие дополнительные функции:

function getCookie($name) {        
    if (!isset($_COOKIE[$name])) return false;
    if ($_COOKIE[$name]=='null') $_COOKIE[$name]=false;
    return $_COOKIE[$name];
}

function removeCookie($name) {
    unset($_COOKIE[$name]);
    setcookie($name, "null");
}

Удалить куки просто:

removeCookie('MyCookie');
....
echo getCookie('MyCookie');
0 голосов
/ 23 марта 2010

Вы также можете удалить куки из javascript. Проверьте здесь http://www.php.net/manual/en/function.setcookie.php#96599

0 голосов
/ 23 марта 2010

Как вы используете данные куки в вашем приложении?

Если вы читаете куки и проверяете, является ли имя пользователя ложным или нет '', тогда достаточно установить его в ложное или '', так как ваше приложениебудет игнорировать значение куки.

Вам лучше установить некоторую безопасность в значение куки, чтобы пользователь не изменил его значение.Вы можете взглянуть на библиотеку сеансов CodeIgniter, посмотреть, как CI защищает значение куки, используя хеш.Будет обнаружено несанкционированное изменение значения, и куки будут удалены.

Кроме того, CI делает это, чтобы убить куки:

// Kill the cookie
    setcookie(
          $this->cookie_name,
          addslashes(serialize(array())),
          (time() - 31500000),
          $this->cookie_path,
          $this->cookie_domain,
          0
        );
0 голосов
/ 23 марта 2010

Возможно, здесь проблема с часовым поясом?Вы пытались настроить, используя что-то еще в прошлом, например, time() - (3600*24)?В документации PHP говорится, что внутренняя реализация для удаления файлов cookie использует временную метку в прошлом году.

Кроме того, вы должны иметь возможность использовать только setcookie('username', false);, не передавая метку времени истечения, поскольку этот аргумент является необязательным.Может быть, в том числе это сбивает с толку PHP как-то?

0 голосов
/ 23 марта 2010

использовать сеансы для аутентификации, не использовать сырые куки

http://www.php.net/manual/en/book.session.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...