(PHP) Как правильно уничтожить cookie сеанса?
Я пытаюсь правильно выйти из администратора. Вот моя функция:
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 сеанса в браузере. но мой код не работает. Я удаляю logout, и я могу просто вернуться к странице администратора. однако, если я удалю свои файлы cookie, функциональность прекрасна. так что случилось с функцией удаления cookie здесь?
Ответы
Ответ 1
Возможно, ваша проблема не в файле cookie, а в браузере, показывающем кешированную версию вашей страницы администратора. Может ли это быть? Если он исчезнет, когда вы нажмете F5, возможно, это так. Это можно отсортировать, установив правильные заголовки cache-control
.
Отметьте этот вопрос SO о том, как настроить кеширование. Вопрос в том, что в точности наоборот (заставляя браузеры кэшировать), но вы поймете, что нужно изменить, чтобы отключить кеширование.
Ответ 2
Если вы действительно хотите охватить все базы, попробуйте сделать:
setcookie (session_id(), "", time() - 3600);
session_destroy();
session_write_close();
Это должно препятствовать дальнейшему доступу к данным сеанса для остальной части выполнения PHP. Браузер все равно может показать, что установлен файл cookie, но $_SESSION super будет пустым.
Ответ 3
Просто подсказка для тех, у кого проблемы с истечением сеанса:
PHP - почему я не могу избавиться от этого куки файла id сеанса?
Всегда используйте session_get_cookie_params(), как в ответе на вопрос по ссылке выше.