2010-06-18 3 views
4

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

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

ответ

2

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

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

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

if($_SESSION['loginTime'] < time()+20*60){ logout(); } 
2

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

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

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

+0

Это не эффективное решение. – DannyG

0

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

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

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

If current time is more than 30 seconds past time X (from the database)

2

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

+1

Немного обманчивая - сбор мусора не имеет ничего общего с тем, когда сеанс отключается - только время (позже), что данные очищаются. Ответ - это время жизни сеанса (которое сбивает с толку gc_) – symcbean

10

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

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

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

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

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

if(time() > $_SESSION['expire']){ 
$user -> logout(); 
} 
0


$ (документ) .ready (функция()
{
комплектTimeout (функция() {CALL LOGOUT.PHP VIA AJAX}, 720000);

});

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

0

Вы можете установить последнее активное время $ _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 
    } 
} 
} 
0

это, как я это сделать:

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

0

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

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

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

<?php 
session_start(); 
session_unset(); 
session_destroy(); 
?>