我是php新手,正在尝试建立一个网站。如果他闲置了一段时间我想退出用户会话。我在网上搜索但我找不到合适的代码。如何在php中检查用户是否空闲?任何人都可以帮助我。
答案 0 :(得分:12)
有几种方法可以做到这一点。这是一对......
设置会话到期时间,以便在一定时间后会话过期且不再有效。
将“时间”标记设置为会话数据,并检查其会话是否仍然“足够新”,以便在每个页面加载中记录它们。
我会选择第二种选择,因为很难在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。因此,您还应该跟踪页面加载时的用户活动。因此,您可能不应该将空闲时间设置得太低(至少对于非JS用户而言),因为非JS用户在发生页面加载之前不会向服务器发送任何数据。
您应该尽快通过ajax向服务器发送有关用户活动的更新,以减少对服务器的需求。要做到这一点,只需让javascript跟踪用户何时超时。如果它到达用户即将超时的程度(比如大约一分钟左右),那么然后 ping服务器。
答案 1 :(得分:1)
您可以为session.cookie_lifetime
配置PHP配置,这将在空闲时间后自动销毁会话。
更多信息可以在http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime
答案 2 :(得分:1)
您可以使用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