如果用户在php中空闲,如何注销会话

时间:2010-08-10 22:03:32

标签: php

我是php新手,正在尝试建立一个网站。如果他闲置了一段时间我想退出用户会话。我在网上搜索但我找不到合适的代码。如何在php中检查用户是否空闲?任何人都可以帮助我。

3 个答案:

答案 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),该更新指定用户空闲的时间。

一些额外的建议:

  1. 您不应该依赖此ajax解决方案作为跟踪用户活动的唯一方法,因为某些用户不会启用JS。因此,您还应该跟踪页面加载时的用户活动。因此,您可能不应该将空闲时间设置得太低(至少对于非JS用户而言),因为非JS用户在发生页面加载之前不会向服务器发送任何数据。

  2. 您应该尽快通过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