авто logout

Habilis

Прииикииинь! ;)
Репутация
Приветствую, вопрос очевидно задавался. В поиске по ключевым словам ничего полезного не нашел.
Скрипт - самопись
Подскажите. как задестроить сессию неактивных игроков (неактивен в течении 2 мин)
вот что есть

Код:
function my_session_start() {
$timeout = 120;
ini_set('session.gc_maxlifetime', $timeout);
session_start();

if (isset($_SESSION['timeout_idle']) && $_SESSION['timeout_idle'] < time()) {
if(isset($_SESSION['login']) && $_SESSION['login'] > 0)
{
$login_id = $_SESSION['login'];
$set_stat = mysql_query("UPDATE user SET status = 0 WHERE id = $login_id");
session_destroy();
session_start();
session_regenerate_id();
$_SESSION = array(); 
}
}

$_SESSION['timeout_idle'] = time() + $timeout;
}

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

ссылки на темы где етот вопрос обсуждался приветствуются. (.... а мат нет)
 
Я вообще храню время в базе, после сравниваю. Если бездействие юзера превышает допустимое время, делаю его не активным.

Код:
$timeout=time()-360 ## 6 min
if ($_SESSION['timeout_idle'] < $timeout) {
$login_id = $_SESSION['login'];
$set_stat = mysql_query("UPDATE user SET status = 0 WHERE id = $login_id and status=1");
session_destroy();
session_start();
session_regenerate_id();
$_SESSION = array(); 
}
 
в .htaccess
Код:
php_value session.cookie_lifetime 120
php_value session.gc_maxlifetime 120

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

Код:
$timeout=time()-360 ## 6 min
if ($_SESSION['timeout_idle'] < $timeout) {
$login_id = $_SESSION['login'];
$set_stat = mysql_query("UPDATE user SET status = 0 WHERE id = $login_id and status=1");
session_destroy();
session_start();
session_regenerate_id();
$_SESSION = array(); 
}

ну если закроет окно и больше не зайдет?
все еще онлайн будет пока снова код незарендерится сервером (перезагруз страницы)
 
ну если закроет окно и больше не зайдет?


Именно так и должно быть.
Если пользователь на странице, но нифига не активен, то спустя 6 минут - если он обновит страничку - его выкинет.

Я правильно понимаю, $_SESSION['timeout_idle'] отвечает за его активность, т.е. содержит данные(время) последней его активности?

а status отвечает за его онлайн? 1 = онлайн, 0 - оффлайн?.
 
Именно так и должно быть.
Если пользователь на странице, но нифига не активен, то спустя 6 минут - если он обновит страничку - его выкинет.

Я правильно понимаю, $_SESSION['timeout_idle'] отвечает за его активность, т.е. содержит данные(время) последней его активности?

а status отвечает за его онлайн? 1 = онлайн, 0 - оффлайн?.

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


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

Я бы вообще засунул это все на крон таким способом.

Код:
$timeout=time()-360 ## 6 min
$login = mysql_query("SELECT `id`,`status`,`timeout_idle` FROM `таблица юзера` WHERE `status`=1");
while ($l=mysql_fetch_array($login)) {
mysql_query("UPDATE `таблица юзера` SET `status`=0 WHERE `timeout_idle` < ".$timeout." and `status`=1 and `id`=".$l["id"]."");
}
 

Похожие темы

Сверху