【问题标题】:How to get notified about a closed session in PHP如何在 PHP 中获得有关关闭会话的通知
【发布时间】:2013-06-16 09:20:07
【问题描述】:

我正在保留我网站的活跃用户列表。 当用户登录时,我将它们添加到列表中。

然后我会定期(定时)调用一个 PHP 脚本,该脚本每次将服务器上的 PHP 会话过期时间延迟 10 分钟。

当用户注销时,我会将他们从活动用户列表中删除。 由于计时器停止并且过期不再延迟,PHP 会话将在 10 分钟后过期。

到目前为止一切顺利。

当用户在未注销的情况下关闭浏览器时,他们的会话仍会在 10 分钟后过期,因为时间戳不再更新。

但是这个用户仍然在我的活跃用户列表中!!

如何删除此用户?

我保留此列表是为了防止用户同时从两台计算机进入,这是客户要求。

编辑: 我确信这可以作为银行网站、票务网站等以某种方式解决这个问题。

【问题讨论】:

标签: php session notifications session-timeout


【解决方案1】:

简单的答案是你不能。无论如何,不​​是单独使用 PHP。如果您愿意强制使用 javascript,您可以编写一个脚本,该脚本会定期从用户的浏览器“轮询”服务器,让它知道用户仍然处于活动状态。然后您还可以减少为您设置的时间间隔PHP 脚本可以更准确地保持更新。

【讨论】:

  • 这正是我正在做的。但是,当浏览器关闭时,我什么都不能调用。
  • 但是,如果您希望客户端定期与服务器“签入”,一旦超过该时间间隔,您可以假设浏览器已关闭/会话结束并将用户从活动列表。如果使用 javascript 来提醒服务器,这个间隔可以设置为 30 秒左右,那还不够准确吗?
  • 我还是不明白你。浏览器已关闭,没有 JavaScript。 PHP 会话将自动过期。我在哪里可以删除用户??
  • 1.浏览器轮询服务器,并在活动用户列表中更新客户端 IP 的“上次活动”时间戳。 2. 您定期运行的 PHP 脚本会检查当前时间与每个“活跃用户”的最后一个活跃时间戳之间的时间差。 3. 如果发现间隔大于 30 秒或其他什么,让 PHP 脚本从活动列表中删除此用户
  • 再一次,这正是事情的运作方式。直到浏览器关闭。关闭浏览器后如何运行 PHP 脚本? PHP 中没有计时器。您是在建议 cron 工作还是类似的工作?
【解决方案2】:

您可以尝试更频繁地更新“活跃用户”列表,但在每次登录时清除用户的会话数据通常更有意义。因此,如果从另一台计算机发生第二次登录,第一次登录将在下一页加载时终止。

【讨论】:

  • 我看不出增加频率对我有什么帮助。而且我不能仅仅因为其他人试图使用他的凭据而将用户赶出去。
  • AFAIK,唯一的故障安全方法是要求用户注销。如果他们关闭浏览器,他们将被锁定(最多)10 分钟。你也可以查看keepalive [tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
相关资源
最近更新 更多