(PHP) Как правильно уничтожить сессионный cookie? - PullRequest
15 голосов
/ 11 февраля 2010

Я пытаюсь правильно выйти из системы с правами администратора. Вот моя функция:

function logout()
{
    $_SESSION = array(); //destroy all of the session variables
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params["path"], $params["domain"],
            $params["secure"], $params["httponly"]
        );
    }
    session_destroy();
}

Обычно, когда я аутентифицирую пароль, я устанавливаю сессию как действительную (всего 1 пользователь). Теперь, когда администратор выходит из системы, я хочу уничтожить текущий сеанс, а также уничтожить cookie, чтобы они не могли просто вернуться на страницу администратора, используя сохраненный cookie сеанса в браузере. но мой код не работает Я нажимаю на кнопку «Выйти» и могу сразу перейти обратно на страницу администратора. однако, если я удалю свои куки, функциональность будет идеальной. так что тут плохого в функции удаления куки?

Ответы [ 3 ]

9 голосов
/ 11 февраля 2010

Если вы действительно хотите охватить все базы, попробуйте выполнить:

setcookie (session_id(), "", time() - 3600);
session_destroy();
session_write_close();

Это должно препятствовать дальнейшему доступу к данным сеанса для остальной части выполнения PHP. Браузер может по-прежнему отображать установленный файл cookie, однако $ _SESSION super будет пустым

7 голосов
/ 11 февраля 2010

Возможно, ваша проблема не в куки, а в браузере, показывающем кешированную версию вашей страницы администратора. Может ли это быть? Если он исчезнет, ​​когда вы нажмете F5 , возможно, это так. Это можно отсортировать, установив правильные заголовки cache-control.

Проверьте этот вопрос SO по вопросу о том, как установить кэширование. Речь идет об обратном (принуждении браузеров кешировать), но вы поймете, что нужно изменить, чтобы отключить кеширование.

3 голосов
/ 03 июля 2012

Просто совет для тех, у кого возникли проблемы с истекшим сроком действия файлов cookie:

PHP - почему я не могу избавиться от cookie-файла этого сеанса?

Всегда используйте session_get_cookie_params (), как в ответе на вопрос в ссылке выше.

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