Я хочу, чтобы мои пользователи автоматически выходили из системы через X минут бездействия. Я также хочу, чтобы все сеансы были уничтожены.
Как это может быть сделано? Как я могу проверить отсутствие активности, а затем выполнить функцию, чтобы вывести их из системы?
Вы также можете сделать:
$_SESSION['loginTime'] = time();
На каждой странице, и когда пользователь пытается перейти, и он неактивен в течение двадцати минут, вы можете его вывести следующим образом:
if($_SESSION['loginTime'] < time()+20*60){ logout(); }
Я устал от Мичиэля и не получил нигде. В ходе расследования я увидел, что оператор if просто добавил период истечения срока действия в текущее время, поэтому оператор никогда не запускал.
Это моя измененная версия:
установите это при регистрации пользователя или загрузке защищенной страницы:
$_SESSION['expire'] = time()+1*60;
И используйте это, чтобы узнать, меньше ли время истечения времени, чем текущее время (т. Е. Мы достигли предела истечения срока действия):
if(time() > $_SESSION['expire']){ $user -> logout(); }
Вы можете установить ограничение времени сеанса, как:
ini_set('session.gc_maxlifetime',30);
Вот возможное решение для вас.
В зависимости от того, насколько быстро ваш сервер и сколько у вас пользователей, вы можете отправить запрос на ваш сервер всякий раз, когда пользователь что-либо делает (перемещается, нажимает кнопку, что угодно). Из этого запроса обновите таблицу SQL с их последним временем активности.
Попросите выполнить задание cron через таблицу через некоторый регулярный интервал и удалить сеансы пользователей, которые были неактивны для любого вашего порога.
Если ваш сервер работает медленно или у вас много пользователей, вы можете запустить этот скрипт нечасто.
Механизм сессии PHP уже имеет сборщик мусора, основанный на тайм-ауте бездействия. Вы не беспокоитесь.
Использовать unset($_SESSION['NAME']);
или session_destroy();
, Вы также можете изменить значение сеанса.
Чтобы сделать это в определенное время, вам нужно установить временную метку в базе данных, а затем вызвать ее, чтобы проверить, не превышает ли она X минут. Посмотрите на ссылку внизу.
Я лично использовал бы файлы cookie и истекал бы их в определенное время, но все, что плавает на вашей лодке.
Если текущее время превышает 30 секунд за прошлый промежуток времени X (из базы данных)
$ (document) .ready (function ()
{
setTimeout (функция () { CALL LOGOUT.PHP VIA AJAX }, 720000);
});
720000 означает 12 минут (для иллюстрации)
поместите этот скрипт в свой заголовок и установите ур собственное время бездействия
вы можете установить время, которое захотите, это будет работать, как если бы вы установили 5 минут, а затем, когда вы входите в систему, тогда он начнет отсчет в течение 5 минут. но если вы нажмете на какой-либо модуль, этот скрипт будет перезагружен, потому что когда страница поворачивается, заголовок также перезагружается, когда скрипт перезагружается, тогда он начинает отсчет с 0 (начальный), но если вы не можете получить доступ к системе в течение 5 минут. то он загрузит logout.php, и система выйдет из системы
Вы можете установить последнее активное время $ _SESSION ['lastactive'] = time () и обновлять его каждый раз, когда пользователь переходит на новую страницу. Затем на каждой странице может быть тайм-аут функции ().
function timeout() { $maxtime = 60*2; // Here , maxtime has been set to 2 minutes if(isset($_SESSION['lastactive']) and (time() - $_SESSION['lastactive'] > $maxtime )) // subtracting current time from lastactive time and seeing if it exceeded timeout limit. { signout(); //logging out } if(isset($_SESSION['lastactive']) and (time() - $_SESSION['lastactive'] < $maxtime )) // subtracting current time from lastactive time and seeing if it exceeded timeout limit. { return 1; // timeout limit not exceeded } else { if(!isset($_SESSION['lastactive'])) { $_SESSION['lastactive'] = time(); //if lastactive is not set } } }
вот как я это делаю:
//set timeout period in seconds $idleTime= 60*2; //check to see if $_SESSION['timeout'] is set if(isset($_SESSION['timeout'])){ $session_life = time() - $_SESSION['timeout']; if($session_life > $idleTime){ // your logout code here* } } $_SESSION['timeout'] = time();
-//set timeout period in seconds $idleTime= 60*2; //check to see if $_SESSION['timeout'] is set if(isset($_SESSION['timeout'])){ $session_life = time() - $_SESSION['timeout']; if($session_life > $idleTime){ // your logout code here* } } $_SESSION['timeout'] = time();
Это делает перезагрузку $ _SESSION ['timeout'] каждый раз, когда страница перезагружается, у меня это в включенном файле в заголовке каждой дополнительной страницы, работает для меня по крайней мере.
Самый простой способ – это. Отправляйте пользователя на страницу выхода, если они не активируют определенные элементы на вашем веб-сайте
$secondsWait = 300; // these are seconds so it is 300s=5minutes header("refresh:$secondsWait; logout.php");
содержимое для перенаправления … logout.php, уничтожить любые сеансы и, возможно, также отправить сообщение, предупреждающее пользователя, почему они были выведены из системы
<?php session_start(); session_unset(); session_destroy(); ?>