【问题标题】:PHP Do something when session destroyedPHP 在会话被破坏时做一些事情
【发布时间】:2012-03-24 11:10:18
【问题描述】:

我想知道是否可以确定某人的会话是否已结束,如果已结束,我是否可以做点什么。

例如,如果会话已结束,请将播放器状态设置为离线。

【问题讨论】:

  • 你的意思是,如果你破坏了会话?或者如果用户停止访问您的网站?
  • 您是否在使用应用程序框架(例如 Symfony、CodeIgniter、Cake 等)?
  • 我猜我会停止访问我的网站。因此,如果他们关闭浏览器等
  • 您需要参考用户的会话 ID 才能按照您描述的方式进行操作。将他们的 PHP 会话 ID 存储在数据库中,然后编写一个脚本来检查这些会话是否仍然处于活动状态。然后我假设在线/离线也存储在数据库中,所以相应地更新。您需要更多细节吗?
  • 当用户关闭浏览器时,Session 不会自动销毁。会话 cookie 可能会被删除,但会话仍然存在于服务器上,直到在一定时间后被删除(可以使用 php.ini 设置)

标签: php cookies session-cookies sessionid


【解决方案1】:

如果用户没有向服务器发出请求,除非您使用数据库系统,否则您无法可靠地知道他们的会话何时结束。例如,您有一个会话表:

session_id | user_id | session_start_time

每当您加载页面时,您都会查看 session_start_time 是否足够大,可以删除。例如:

if (($data['session_start_time'] + USER_SESSION_TTL) < time()) {
    // delete row
}

USER_SESSION_TTL 是用户会话处于非活动状态时保持活动的时间。

现在,如果用户没有与他关联的会话,您可以放心地假定他处于离线状态。我概括了一下,但是可以应用于很多系统。

希望对你有帮助

【讨论】:

  • 谢谢,但这部分是什么意思。 USER_SESSION_TTL
  • 我为那部分添加了说明。如果他不访问您的网站(不活动),它基本上是用户会话保持活动的时间(以秒为单位)。
【解决方案2】:

虽然没有内置机制,但如果您实现自己的会话处理程序,您可能可以对此做点什么。

请参阅http://nl2.php.net/manual/en/function.session-set-save-handler.php 了解一些想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-31
    • 2016-04-28
    • 2023-03-04
    • 2013-01-29
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多