Обычно когда пользователю нужно уйти с вашего веб-сайта, наступает момент завершения работы сессии, для чего, как показано в примере, вместе с функцией 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');
Начало сессии | Безопасность сессии |