Подтвердить что ты не робот

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

Я слышал смешанные ответы на эту тему, так что это верный способ уничтожить сессию PHP?

session_start();
if(isset($_SESSION['foo'])) {
   unset($_SESSION['foo'];
   ...
}
session_destroy();

В самых простых случаях достаточно ли было бы действительно прекратить сеанс между пользователем и сервером?

4b9b3361

Ответ 1

Чтобы уничтожить сеанс, выполните следующие действия:

  • удалить данные сеанса
  • аннулировать идентификатор сеанса

Для этого Id использует это:

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();

И чтобы убедиться, что идентификатор сеанса недействителен, вы должны разрешать только идентификаторы сеансов, которые были инициированы вашим script. Поэтому установите флаг и проверьте, установлено ли оно:

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();
}

Ответ 2

Руководство PHP решает этот вопрос.

Вам нужно убить сеанс, а также удалить cookie сеанса (если вы используете файлы cookie).

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

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

Ответ 3

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

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

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

Ответ 4

$_SESSION = [];
@unset($_COOKIE[session_name()]);
session_destroy();