【问题标题】:php how to execute function on session timeoutphp如何在会话超时时执行函数
【发布时间】:2011-09-21 13:33:14
【问题描述】:

我有 $_SESSION 变量,其中包含用户登录用户名,这些用户名设置了默认会话生命周期(我认为是 24 分钟)。我想知道是否有办法在会话超时时执行函数。

我知道当用户重新加载页面并且会话变量已过期时,我可以告诉页面执行该函数,但我正在尝试找出一种方法让服务器自行执行此操作。有这样的方法吗?

我的推理:当用户登录时,我向我的数据库报告并更新“lastlogin”的用户记录。我想在用户单击注销或$_SESSION 变量过期时更新“lastlogout”。

【问题讨论】:

    标签: php authentication session-state session-timeout


    【解决方案1】:

    您可以通过这种方式使用 javascript:

    <?php
    
    ...
    $currentTimeoutInMillis = ini_get(’session.gc_maxlifetime’) * 1000;
    
    print "<script type='text/javascript'>\n";
    print "<!--\n";
    print "setTimeout('window.location.href=\"timeout.php\"', $currentTimeoutInMillis);\n";
    print "//-->\n";
    ...
    
    ?>
    

    然后您的timeout.php 将在超时时间用完时自动调用。在此脚本中,此时 $_SESSION 内容已经丢失(垃圾收集) - 您可以调用数据库来更新用户记录。

    【讨论】:

    • 没错,如果窗口关闭,它就不起作用了。坦率地说,我不确定关闭窗口后您是否可以做任何事情。
    【解决方案2】:

    在关闭和 gc(垃圾收集器)时尝试在 session_set_save_handler 中设置回调。

    【讨论】:

    • 我还没有尝试过,但听起来很有希望,感谢您的意见。
    猜你喜欢
    • 2018-08-20
    • 1970-01-01
    • 2011-03-05
    • 2011-10-17
    • 2018-01-24
    • 1970-01-01
    相关资源
    最近更新 更多