Выход бездействия пользователя

Я хочу, чтобы мои пользователи автоматически выходили из системы через 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(); ?>