如何检测包含PHP应用程序的最后一个选项卡正在关闭

How to detect that the last tab containing my PHP app is closing?

本文关键字:选项 最后一个 应用程序 何检测 检测 PHP 包含      更新时间:2023-09-26

我在我的PHP应用程序的菜单上有一个很好的Logout按钮,但是有些人不使用它,他们只是退出浏览器。

是否有任何方法,我可以检测到这个(我意识到它不会处理浏览器崩溃,但它比我现在有更好的&

这将是我的第一篇JS。

  • 我认为我可以很容易地写一个页面关闭处理程序?或者我应该使用onbeforeunload()?
  • 在它,也许我可以走所有的浏览器窗口和他们的标签(相同或不同的每个浏览器?(IE, FF等))
  • 我可以得到每个选项卡的URL,并检查它是否正在运行我的应用程序(或者有更好的方法来做到这一点)?
  • 如果这是最后一个标签,要么加载一个新的年龄,这是我的应用程序的注销页面,然后关闭它(等待它完全打开?或者只是发送一个HTTP请求并等待200 OK),或者使用Ajax?

更新

请不要使用基于计时器的解决方案。我已经设置了一个,但是单个用户将超时设置为999999分钟,同时用户的数量设置为1,然后关闭浏览器&把自己锁在门外

更新

似乎这里知道的人说这不能在JS中完成,谷歌建议我在DOM中不支持。

但是,另一种方式呢?从侧面思考,伙计们。当用户从我的应用中打开一个新标签页时,我能推送一个cookie吗?然后当用户想要关闭标签页时删除cookie ?并检查我是否正在删除最后一个cookie &通知服务器将此视为注销?

如果不是cookie,还有其他方法吗?(使用Ajax打开页面&关闭,服务器可以判断最后一个选项卡是否已关闭

如果在最后'x'秒/分钟内没有请求,则在服务器端暂停会话。

通过JS做这个可以像发送一个周期性的"心跳"请求回服务器一样简单,每5秒一次,当选项卡关闭时停止。然后,如果您的注销超时时间为5分钟,那么如果它在5分钟内没有心跳,那么您可以尽可能地确信客户端已经离开。

这是有用的,例如,如果你的页面有大量的内容(比如一篇很长的文章),用户在几分钟或几小时内不会发出任何请求,但不关闭标签,因此,你希望他们保持一个活跃的会话。

  1. 您可以添加一些代码,在onbeforeunload中关闭页面时执行。但是,如果时间太长,浏览器可能会中止你的代码。
  2. 不,你不能遍历选项卡;这是一个安全漏洞。
  3. 没有;因为你不能遍历选项卡,你也不能得到它们的url。
  4. 你无法检测到它是否是你的页面打开的最后一个标签,但如果你可以,浏览器可能会阻止打开一个窗口关闭一个标签。但是,同步AJAX请求可以工作。

没有明确的方法来做你所要求的,事实上这之前已经问过了:

javascript检测浏览器关闭选项卡/关闭浏览器

使用会话超时,如第一个注释所建议的。