会话被破坏后引发函数

会话被破坏后引发函数

问题描述:

我想在会话被销毁后(即用户关闭浏览器)诱发函数。该函数会将我的数据库中的值从true更改为false。那可能吗?会话被破坏后引发函数

+6

服务器不可能知道用户关闭浏览器的时间。 – SLaks

+0

当垃圾收集运行并且会话文件超过最大生存期时会话数据被销毁。它从来没有涉及到浏览器事件。 –

+2

你可以尝试对onunload事件发起请求,但不能保证它会起作用(它也会在导航到另一个页面时被触发)。如果您正在跟踪数据库中的会话,通常的方法是假定它会在某个时间点后过期。 – datasage

我建议你在你的数据库中注册用户的最后活动,这样它就100%准确。 然后通过比较注册日期和当前时间,您可以决定用户何时处于活动状态。

如果你真的想知道用户是否仍在你的页面上,你也可以做一些事情,但你应该避免它: 在客户端,做一个JavaScript循环,例如每一分钟,告诉你的服务器客户端仍然在那里。当客户端关闭他的页面时,循环不会进行任何新的查询。

我猜你想知道用户是否在线(或类似的东西?)“知道”(阅读:猜测)会话已死的唯一方法是存储用户上次活动的时间,然后将该时间与当前时间进行比较。然后,根据您的需要,您可以决定假设为假设,表示30分钟处于非活动状态的用户处于脱机状态。

只有这样做的方法是使用Javascript检测到关闭并使用Ajax请求(例如使用XMLHttpRequest)到您的PHP页面(它处理注销部分)。

请参阅Browser/tab close detection using javascript (or any other language)关于关闭部分的更多信息。

+0

我认为这会起作用,然而当用户点击链接或刷新页面时也会发生onunload事件 - 我只想和当用户关闭浏览器的窗口或选项卡时发生的事件。 – Ziarno

+0

@Ziarno有些网站有'你确定要离开?'的问题。检查了这一点:http://*.com/questions/1119289/how-to-show-the-are-you-sure-you-want-to-navigate-away-from-this-page-when-ch - 这是你应该使用的方式。 – Devator

+0

我不希望函数在刷新时触发。我想有没有办法只是有一个事件,触发选项卡/窗口关闭,而不是刷新/链接... – Ziarno