2012-01-05 111 views
0

我写了一个脚本(PHP)即使用会话,以便它结束在重启浏览器后,也照本宣科了“注销”功能(具有摧毁会议还删除的cookie从浏览器)。节约时间结束

这里是我的问题:

当用户自愿注销时间由我的脚本保存。但我无法控制浏览器重新启动或关闭的情况。

有什么方法可以用来处理这些情况吗?谢谢...

+0

想知道用户何时关闭浏览器?也许可以做一个Ajax电话? – thatwasbrilliant 2012-01-05 20:04:18

+0

据我记得,你必须检测文档关闭事件(不记得名字),然后发送AJAX请求来保存数据。 – therealszaka 2012-01-05 20:04:51

+0

为什么你最初需要它? – zerkms 2012-01-05 20:05:10

回答

1

我会绑定一个AJAX事件卸载的Javascript事件。

$(window).unload(function() { 
    $.ajax({ 
     url: 'someLogoutRequest.php' 
    }); 
}); 
+1

同一站点的多个选项卡打开 - 会导致问题吗? – hakre 2012-01-05 20:06:44

+0

......正如我在评论中提到的那样 - 如果客户刚刚失去了联系呢? – zerkms 2012-01-05 20:07:39

+0

卸载事件是特定于该选项卡,我很确定。 – jjs9534 2012-01-05 20:07:45

4

如果没有来自浏览器的请求,您的服务器端(PHP)将不会注意到。

但是,如果你在更新数据库中的最后一个活动的时间戳,你会知道什么时候最后一次活动了。随着会话在一段时间后被破坏,该用户的最后一个活动将保留在数据库中,直到下次登录。

+0

我认为这是解决方案,而且如果您关心用户的上次访问,您应该更新登录用户的时间戳或编写自己的会话处理程序来跟踪上次会话访问时间。当然,会话数据会不时被清除(请参阅垃圾回收),所以如果您对时间戳感兴趣,第一个选项就是要走的路。这样你将永远有用户上次访问时间。 – ashein 2012-01-05 20:09:20

2

你可以得到用户页面的一些合理区间服务器使用Ajax办理入住手续。 (5分钟?)然后每5分钟在服务器上运行一次作业,以检查那些长时间没有签入的用户。你可以假设他们关闭窗口的时间,或者失去他们之间的连接是在他们的最后一次检查和当前时间之间,然后破坏会话。

0

PHP会议通常在浏览器关闭(假设你不混淆cookie和session)会死,但,你可以补充一点的是时间戳时间后,任何明智的存储时间标记的额外会议。无效,并清除会话。您通常会在用户导航时更新此时间戳,以便它不会暂停中途导航。虽然我还没有百分之百清楚你想要做什么以及为什么。所以我的回答可能是需要的一个无声的概念。 jjs9543有一个不是很糟糕的建议,但如果JavaScript在用户浏览器上被禁用(我无法像几年前那样普遍,但没有什么值得说的),那么建议将失败。