как выйти из сессии, если пользователь простаивает в php - PullRequest
4 голосов
/ 11 августа 2010

Я новичок в php и пытаюсь создать сайт.Я хотел бы выйти из сеанса пользователя, если он простаивает в течение некоторого времени.Я искал в Интернете, но не смог найти правильный код.Как проверить, простаивает ли пользователь в php?Может кто-нибудь помочь мне, пожалуйста.

Ответы [ 3 ]

12 голосов
/ 11 августа 2010

Есть несколько способов сделать это.Вот пара ...

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

  • установить флаг «время» в качестве данных сеанса и проверить, является ли их сеанс все еще «достаточно новым», чтобы сохранять их в журнале при каждой загрузке страницы.

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

Пример кода для параметра2:

//on pageload
session_start();

$idletime=60;//after 60 seconds the user gets logged out

if (time()-$_SESSION['timestamp']>$idletime){
    session_destroy();
    session_unset();
}else{
    $_SESSION['timestamp']=time();
}

//on session creation
$_SESSION['timestamp']=time();

РЕДАКТИРОВАТЬ:

Ваш комментарий объясняет, что вы на самом деле хотели бы отслеживать события мыши и другие вещи на стороне клиента, чтобы определить, является ли пользовательпростаивает.Это сложнее.Я дам общее решение, а затем предложу пару предложений по оптимизации и улучшениям.

Чтобы выполнить то, что вы описали, вы должны отслеживать активность клиентов (движения мыши, нажатия клавиш и т. Д.).) и обрабатывают эту информацию на стороне сервера .

Отслеживание активности на стороне клиента потребует обработчиков событий javascript.Вы должны создать обработчик событий для каждого действия, которое вы хотите считать «не бездействующим», и отслеживать (в переменной javascript), когда в последний раз они простаивали.

Обработка этой информации на стороне сервера потребует от вас использования ajax для отправки в последний раз, когда они простаивали на сервере.Поэтому каждые несколько секунд вы должны отправлять на сервер обновление (используя javascript), в котором указывается, сколько времени пользователь простаивает.

Пара дополнительных предложений:

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

  2. Вы должны посылать обновления на сервер через ajax как можно реже о действиях пользователей, чтобы снизить нагрузку на сервер.Для этого просто сделайте так, чтобы JavaScript отслеживал время ожидания пользователя.Если доходит до того, что пользователь собирается истечь (скажем, через минуту или около того), тогда и только тогда пингует сервер.

1 голос
/ 11 августа 2010

Вы можете использовать session_cache_expire, я приведу вам этот пример:

 <?php

/* set the cache limiter to 'private' */

session_cache_limiter('private');

$cache_limiter = session_cache_limiter();

/* set the cache expire to 30 minutes */

session_cache_expire(30);

$cache_expire = session_cache_expire();

/* start the session */

session_start();

echo "The cache limiter is now set to $cache_limiter<br />";

echo "The cached session pages expire after $cache_expire minutes";

?>

Источник: php.net

1 голос
/ 11 августа 2010

Вы можете настроить PHP-конфигурацию для session.cookie_lifetime, это автоматически уничтожит сессию после периода простоя
Более подробную информацию можно найти здесь http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...