Поистине уничтожить сессию PHP?

Я слышал смешанные ответы на эту тему, так что это верный способ уничтожить сессию 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).

См. Эту страницу (особенно первый пример):

http://us2.php.net/manual/en/function.session-destroy.php

На одном сайте, который я сделал, где я использовал сеансы PHP, я никогда не уничтожаю сессию.

Проблема в том, что вам в значительной степени нужно вызвать session_start() чтобы проверить ваши переменные $_SESSION , и в этот момент, и вот, вы все равно создали еще один сеанс.

Поэтому на моем сайте я просто убедился, что каждая страница с именем session_start() , а затем просто unset() те части состояния сеанса, которые имеют значение, когда пользователь выходит из системы.