(PHP 4, PHP 5, PHP 7, PHP 8)
session_destroy — Уничтожает зарегистрированные данные сессии
Функция session_destroy() уничтожает файл с данными текущей сессии. Функция не удаляет глобальные переменные сессии, и не удаляет сессионный блок данных cookie. Повторный вызов функции session_start() создаст новый файл данных сессии, чтобы снова сохранять и извлекать переменные сессии.
Замечание: Функцию session_destroy() не вызывают в рабочем коде. Вместо уничтожения данных сессии очищают суперглобальный массив $_SESSION.
Вместе с удалением данных сессии удаляют и идентификатор сессии, чтобы убить саму сессию. При поведении по умолчанию, при котором идентификатор сессии передаётся через cookie, сессионные cookie также требуется удалить. Для этого вызывают функцию setcookie().
При включённой опции session.use_strict_mode устаревший блок данных cookie с идентификатором сессии не удаляют, поскольку модуль сессии не будет принимать и устанавливать новый блок данных cookie с идентификатором сессии, если с идентификатором сессии не связали данные. Разработчики PHP рекомендуют включать опцию session.use_strict_mode на рабочих сайтах.
Немедленное удаление сессии иногда даёт нежелательные результаты. При одновременных запросах другие соединения сталкиваются с внезапной потерей данных сессии. К таким запросам, например, относятся JavaScript-запросы и (или) запросы, которые отправляет браузер при переходе по ссылкам на URL-адреса.
Текущий модуль сессии хотя и не принимает блок данных cookie с пустым идентификатором сессии, немедленное удаление сессии из-за состояния гонки на стороне клиента (браузера) иногда создаёт cookie с пустым идентификатором сессии, из-за чего клиент создаёт серию ненужных идентификаторов сессии.
На клиенте не появятся условия гонки и клиент не создаст ненужные идентификаторы сессии, если установить в массиве $_SESSION временну́ю метку удаления сессии, а позже отклонить доступ к старому идентификатору сессии, или убедиться, что приложение не создаёт параллельные запросы. Это предупреждение также относится к функции session_regenerate_id().
У этой функции нет параметров.
Функция возвращает true
, если выполнилась успешно, или false
, если возникла ошибка.
Пример #1 Пример уничтожения сессии через суперглобальный массив $_SESSION
<?php
// Инициализируем сессию
// При установке пользовательского названия сессии перед вызовом функции session_start()
// не забудьте вызывать session_name("something")!
session_start();
// Удаляем все переменные сессии
$_SESSION = array();
// Если нужно убить сессию, также удаляем сессионный блок данных cookie.
// Замечание: Это уничтожит сессию, а не только данные сессии!
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();
?>