Материал предоставлен https://it.rfei.ru

Завершение сессии

Обычно когда пользователю нужно уйти с вашего веб-сайта, наступает момент завершения работы сессии, для чего, как показано в примере, вместе с функцией unset можно воспользоваться функцией session_destroy. В этом примере предоставляется полезная функция для полного уничтожения сессии, выхода пользователя и очистки всех переменных сессии.

Пример. Полезная функция уничтожения сессии и ее данных

<?php
function destroy_session_and_data()
{
   session_start();
   $_SESSION = array();
   setcookie(session_name(), '', time() - 2592000, '/');
   session_destroy();
}
?>

Чтобы увидеть этот код в действии, можно модифицировать программу continue.php, как показано в следующем примере.

Пример. Извлечение переменных сессии перед ее уничтожением

<?php
session_start();
  if (isset($_SESSION['username']))
  {
    $username = $_SESSION['username'];
    $password = $_SESSION['password'];
    $forename = $_SESSION['forename'];
    $surname  = $_SESSION['surname'];
    echo "С возвращением, $forename.<br/>
    Ваше полное имя $forename $surname.<br/>
    Ваше имя пользователя '$username'
    и ваш пароль '$password'.";
    destroy_session_and_data();
}

else echo "Пожалуйста, для входа <а href=authenticate2.php>щелкнитe здесь</а>.";

function destroy_session_and_data()
  {
    $_SESSION = array();
    if (session_id() != "" || isset($_COOKIE[session_name()]))
    setcookie(session_name(), "", time() - 2592000, '/');
    session_destroy();
  }
?>

При первом переходе из authenticate2.php в continue.php будут выведены все переменные сессии. Но если после этого щелкнуть в браузере на кнопке обновления страницы, в результате предшествующего этому вызову функции destroy_session_anddata сессия уже будет уничтожена и будет выведено приглашение вернуться на страницу регистрации.

Но если требуется удалить значения переменных сессий, необходимо воспользоваться функцией session_unset(), а затем уничтожить саму сессию.

Установка времени ожидания

Есть и другие причины, по которым может потребоваться самостоятельное закрытие пользовательской сессии, например, если пользователь забыл зарегистрироваться или проигнорировал этот процесс и нужно, чтобы программа закрыла его сессию в целях собственной безопасности. Это можно сделать, установив время ожидания, по истечении которого, если не предпринять активных действий, произойдет автоматическое завершение работы.

Для этого используется функция ini_set. В данном примере время ожидания устанавливается ровно на сутки:

ini_set('session.gc_maxlifetime', 60 * 60 * 24);

Если нужно узнать текущее время ожидания, его можно отобразить, воспользовавшись следующим кодом:

echo ini get('session.gc_maxlifetime');

Начало сессииБезопасность сессии