Я новичок в php и пытаюсь создать сайт. Я хотел бы выйти из сеанса пользователя, если он некоторое время простаивает. Я искал в Интернете, но я не смог найти правильный код. Как вы проверяете, находится ли пользователь в режиме ожидания или нет в php ?. Кто-нибудь может мне помочь.
Есть несколько способов сделать это. Вот пара …
установите время истечения сеанса, так что через определенное время сеанс истекает и больше недействителен.
установите флаг «время» в качестве данных сеанса и проверьте, все ли их сеанс по-прежнему «достаточно новый», чтобы они регистрировались в каждой папке.
Я бы выбрал второй вариант, так как может быть сложно установить правильные значения в 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), в котором указывается, как долго пользователь простаивает.
Несколько дополнительных предложений:
Вы не должны полагаться на это решение ajax как единственный способ отслеживать активность пользователя, так как некоторые пользователи не имеют JS. Таким образом, вы также должны отслеживать активность пользователя в pageload. Соответственно, вы, вероятно, не должны устанавливать слишком малое время простоя (по крайней мере, для пользователей, не являющихся JS), поскольку пользователи, не являющиеся JS, не будут отправлять какие-либо данные на сервер до тех пор, пока не появятся pageloads.
Вы должны отправлять обновления на сервер через ajax как можно реже о активности пользователя для снижения спроса на сервере. Чтобы сделать это, просто проверьте javascript, когда пользователь будет тайм-аут. Если он дойдет до того момента, когда пользователь собирается тайм-аут (скажем, примерно через минуту или около того), тогда и только тогда пинг сервера.
Вы можете настроить PHP-конфигурацию для session.cookie_lifetime
, это автоматически отключит сеанс после количества времени простоя.
Более подробную информацию можно найти здесь http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime
Вы можете использовать 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