Выход из активности пользователя PHP - PullRequest
6 голосов
/ 18 июня 2010

Я хочу, чтобы мои пользователи автоматически выходили из системы после X минут бездействия.Я также хочу, чтобы все сеансы были уничтожены.

Как это можно сделать?Как я могу проверить отсутствие активности, а затем выполнить функцию для их выхода из системы ???

Ответы [ 10 ]

10 голосов
/ 10 января 2011

Я устал от подхода Михилса и не получил никуда.В ходе расследования я обнаружил, что оператор if просто добавляет период истечения к текущему времени, поэтому оператор никогда не запускается.

Это моя измененная версия:

установите его при входе в систему пользователя или загрузкезащищенная страница:

 $_SESSION['expire'] = time()+1*60;

И используйте это, чтобы увидеть, если время истечения меньше текущего времени (т. е. мы превысили лимит истечения):

if(time() > $_SESSION['expire']){
 $user -> logout();
}
4 голосов
/ 18 июня 2010

Вы можете установить ограничение времени ожидания сеанса, например:

ini_set('session.gc_maxlifetime',30);

Вот возможное решение для вас.

3 голосов
/ 18 июня 2010

Вы также можете сделать:

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

На каждой странице, и когда пользователь пытается перемещаться и он неактивен в течение двадцати минут, вы можете выйти из него следующим образом:

if($_SESSION['loginTime'] < time()+20*60){ logout(); }
2 голосов
/ 18 июня 2010

Механизм сеанса PHP уже имеет сборщик мусора, основанный на таймауте неактивности.Вам не о чем беспокоиться.

2 голосов
/ 18 июня 2010

В зависимости от того, насколько высок ваш сервер и сколько у вас пользователей, вы можете сделать так, чтобы он отправлял запрос на ваш сервер всякий раз, когда пользователь что-то делает (перемещается, нажимает кнопку, что угодно). Из этого запроса обновите таблицу SQL, указав время последнего действия.

Пропустите задание cron через таблицу через некоторый регулярный интервал и удалите сеансы пользователей, которые были неактивны, независимо от того, каким будет ваш порог.

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

1 голос
/ 16 декабря 2016

Вы можете установить последнее активное время с помощью $ _SESSION ['lastactive'] = time () и обновлять его каждый раз, когда пользователь переходит на новую страницу. Тогда у вас может быть функция timeout () на каждой странице.

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
    }
}
}
0 голосов
/ 12 сентября 2017

Самый простой способ это. Отправьте пользователя на страницу выхода, если он не активирует определенные элементы на вашем сайте

$secondsWait = 300; // these are seconds so it is 300s=5minutes
header("refresh:$secondsWait; logout.php");

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

<?php
session_start();
session_unset();
session_destroy();  
?>
0 голосов
/ 18 января 2017

это то, как я это делаю:

//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'] каждый раз при перезагрузке страницы, у меня это есть во включаемом файле в заголовке каждой подстраницы, у меня работает как минимум.

0 голосов
/ 27 ноября 2014


$ (документ) .ready (function ()
{
setTimeout (function () { ВЫЗОВ ЛОГОТИПА.PHP VIA AJAX }, 720000);

});

720000 означает 12 минут (для иллюстрации)
поместите этот скрипт в свой заголовок и установите свое время бездействия
Вы можете установить, в какое время вы хотите, это будет работать как если вы установите 5 минут, то при входе в систему начнется отсчет 5 минут. но если вы щелкнете по любому модулю, этот скрипт будет перезагружен, потому что, когда страница переворачивается, заголовок также перезагружается, когда скрипт перезагружается, тогда он начинает отсчет с 0 (начальный), но если вы не можете получить доступ к системе в течение 5 минут. тогда он загрузит logout.php и система выйдет из системы

0 голосов
/ 18 июня 2010

Используйте unset($_SESSION['NAME']); или session_destroy();. Вы также можете изменить значение сеанса.

Чтобы сделать это в определенное время, вам потребуется установить временную метку в базе данных, а затем вызвать ее, чтобы проверить, не превышает ли она X минут. Посмотрите на ссылку внизу.

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

Если текущее время прошло более 30 секунд X (из базы данных)

...