Я слышал смешанные ответы на эту тему, так что это верный способ уничтожить сессию PHP?
session_start(); if(isset($_SESSION['foo'])) { unset($_SESSION['foo']; ... } session_destroy();
В самом простом случае, достаточно ли этого, чтобы действительно прекратить сеанс между пользователем и сервером?
Чтобы уничтожить сеанс, выполните следующие действия:
Для этого я использовал бы это:
session_start(); // resets the session data for the rest of the runtime $_SESSION = array(); // sends as Set-Cookie to invalidate the session cookie if (isset($_COOKIE[session_name()])) { $params = session_get_cookie_params(); setcookie(session_name(), '', 1, $params['path'], $params['domain'], $params['secure'], isset($params['httponly'])); } session_destroy();
И чтобы убедиться, что идентификатор сеанса недействителен, вы должны разрешать только идентификаторы сеансов, которые были инициированы вашим скриптом. Поэтому установите флаг и проверьте, установлено ли оно:
session_start(); if (!isset($_SESSION['CREATED'])) { // invalidate old session data and ID session_regenerate_id(true); $_SESSION['CREATED'] = time(); }
Кроме того, вы можете использовать эту временную метку, чтобы периодически менять идентификатор сеанса, чтобы сократить его продолжительность жизни:
if (time() - $_SESSION['CREATED'] > ini_get('session.gc_maxlifetime')) { session_regenerate_id(true); $_SESSION['CREATED'] = time(); }
Руководство PHP направляет этот вопрос.
Вам нужно убить сеанс, а также удалить cookie сеанса (если вы используете файлы cookie).
См. Эту страницу (особенно первый пример):
На одном сайте, который я сделал, где я использовал сеансы PHP, я никогда не уничтожаю сессию.
Проблема в том, что вам в значительной степени нужно вызвать session_start()
чтобы проверить ваши переменные $_SESSION
, и в этот момент, и вот, вы все равно создали еще один сеанс.
Поэтому на моем сайте я просто убедился, что каждая страница с именем session_start()
, а затем просто unset()
те части состояния сеанса, которые имеют значение, когда пользователь выходит из системы.