Изучение PHP на практических примерах
  256ПрограммированиеPHPАвтоматическое завершение сессии в панели управления аккаунтом

Автоматическое завершение сессии в панели управления аккаунтом

Постановка задачи

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

Решается данная задача очень просто. В конфигурационном файле определяете константу для хранения времени жизни сессии, имя любое, но так чтобы оно отражало суть хранимых данных, например, END_OF_WORK_SEC, при этом время указывается в секундах. Для пользователя лучше выводить сообщение в минутах, хотя почему-то программисты часто так не делают.define("END_OF_WORK_SEK", 1800);define("END_OF_WORK_MIN", END_OF_WORK_SEK / 60);

В модуле аутентификации запускаете сессию, определяете текущее время и сохраняете его в сессионной переменной.

Фрагмент кода из функции авторизации пользователя

session_start();
$_SESSION['time'] = time();

Использование функции автозавершения сессии

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

PHP-код функции AutoExit

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

В случае когда разность не превышает допустимый предел необходимо записать в сессионную переменную новое значение времени.

<?php
function AutoExit() {
$time = time();
$difference = $time - $_SESSION['time'];
if ($difference > END_OF_WORK_SEC) {
session_destroy();
include_once("top1.php");
echo "<h2>Время не активности более ".END_OF_WORK_MIN." минут. Для продолжения работы необходимо авторизоваться</h2>";
// Здесь можно вызвать функцию аутентификации
// или сделать ссылку на страницу авторизации.
include_once("bottom1.php");
exit();
}
$_SESSION['time'] = $time;
} ?>

Рекламный блок

Информационный блок