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

最佳答案

有几种方法可以做到这一点。这里有一对...

  • 设置 session 过期时间,这样在一定时间后, session 过期不再有效。
  • 将“时间”标志设置为 session 数据,并检查他们的 session 是否仍然“足够新”以保持他们在每个页面加载中的记录。

  • 我会选择第二个选项,因为很难在 PHP 中设置正确的值以使 session 安全地过期,以及您想要的方式。使用第二个选项,您所要做的就是确保 session 不会在您希望之前过期,这更容易。

    选项 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 服务器。
  • 关于php - 如果用户在 php 中空闲,如何注销 session ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3453831/

    10-11 08:02
    查看更多