Events 关闭页面后注销用户的Firefox扩展

Events 关闭页面后注销用户的Firefox扩展,events,firefox,Events,Firefox,我正在编写我的第一个FireFox扩展,我有一些问题。也许有人能帮忙 我有一个网站,需要登录。每个登录类型有一个用户登录。因此,如果我用用户名“tom”从一台电脑登录,然后转到另一台电脑并尝试使用相同的详细信息登录,则登录失败。当我从我的认证页面单击注销按钮时,新位置执行一个PHP函数来注销用户(更新MySQL中用户的“已登录”状态)。问题是,如果用户从办公桌上登录并浏览网页,那么他会突然接到朋友的电话,要求在休息时间快速吃午餐,并且必须在短时间内与他会面,他只需单击Firefox中的X(关闭)

我正在编写我的第一个FireFox扩展,我有一些问题。也许有人能帮忙

我有一个网站,需要登录。每个登录类型有一个用户登录。因此,如果我用用户名“tom”从一台电脑登录,然后转到另一台电脑并尝试使用相同的详细信息登录,则登录失败。当我从我的认证页面单击注销按钮时,新位置执行一个PHP函数来注销用户(更新MySQL中用户的“已登录”状态)。问题是,如果用户从办公桌上登录并浏览网页,那么他会突然接到朋友的电话,要求在休息时间快速吃午餐,并且必须在短时间内与他会面,他只需单击Firefox中的X(关闭)按钮,忘记按注销按钮,因此登录状态仍然为1。稍后,如果他想从主页再次访问该页面,他将无法登录

因此,我需要从firefox中获取“关闭”事件。我正在考虑寻找那些只包含“website.com”域名的网站。然后,如果一个标签被关闭或者Firefox的主窗口被关闭,那么发送一个唯一的密钥,并将用户名发送到该URL以注销用户,问题就可以解决了。我不知道这是否可能。请张贴任何想法(后面的代码,如果可以的话)为这个扩展将被建立


谢谢。

出于设计,这是错误的

如果用户的电脑崩溃(硬盘故障、电源故障),您的插件将无法注销该用户。因此,用户将无法在任何PC上登录

--

让我们重新审视这个前提

a。为什么从另一台电脑登录需要失败

b。当用户登录到另一台电脑时,如何使前一台电脑的登录无效(注销)。这有点像Yahoo!信使工作

根据您的回答,我建议您:如果用户登录到另一台电脑,请发出警告并向用户提供选项:

  • 取消登录
  • 强制注销其他用户并继续登录

在一段时间不活动后将用户注销是(应用程序或web)服务器的责任,而不仅仅是客户端浏览器的责任。这称为会话超时

正如您所描述的,您可以通过浏览器实现避免超时,但这不应该是主要的解决方案

以下是您可能采取的一种即兴方法:

在您的情况下,我会在存储“锁定”状态的表中包含一个时间戳。每次用户执行操作时,时间戳都会更新。当您尝试再次登录ad时,时间戳较旧,特定阈值(例如15分钟)您的登录代码应以静默方式注销前一个用户。

您可以使用ajax在站点上ping页面-所有会话信息都将被传递,并且您可以验证该用户是否仍然打开了活动浏览器/页面。如果Firefox崩溃,它将无法再ping该网站,会话可能在15分钟后超时。我认为允许在另一个登录上强制注销是最好的。通常,当我在一天结束后下班时,我不会关闭所有的程序或注销或其他任何事情——只是锁定我的电脑以防止任何人使用它。第二天早上,我回来时,我所有的程序都还在运行,这样我就可以继续我离开的地方了


顺便说一句,YahooWebMessenger可能使用某种形式的基于会话的cookie。也就是说,cookies存储在内存中,当选项卡或浏览器关闭时,cookies将消失

要收到关于关闭选项卡的通知,您需要执行以下操作。但是,您需要侦听卸载,而不是侦听加载


当您最终收到卸载通知时,您必须像web应用程序一样请求注销页面。通过选中
aEvent.originalTarget.location.href
,可以确定正在卸载的文档的位置。请注意,
aEvent.originalTarget
将为您提供正在关闭的选项卡的
文档
对象。然后,您需要在事件处理程序中使用XLMHttpRequest来完成此任务。

只需启用用户从另一台机器重新登录即可。如果你在第一台机器上收到用户的请求,请他也重新登录。因此,一次只能有一个登录用户。

我还想补充一点,登录应该在一段时间后过期,或者只是在一段不活动的时间后过期。因为每个用户名正在生成从多个表收集到一个临时表中的内容。如果有两个用户登录,那么一个用户将生成某些内容,而另一个用户将生成其他内容,因此当他们需要查看结果时,每个用户都会看到彼此的选择结果,因此这是错误的。B如果一个用户编写一条消息大约5分钟,同时第二个用户登录,那么第一个用户将在数据库中被记录为=0。新用户将浏览happy,第一个用户将单击“发送消息”,并出现一条错误消息“您未登录”。其他信息:这是一家公司的信息。每个部门都有一个用户名。每个员工一次只能使用一个。谢谢。我想到了,但我把它作为最后的选择。我在想Yahoo Webmessenger:在你关闭浏览器标签或主窗口后,他们如何自动将你唱出来?我是说那个例子,不是以后。。。击败我..+1对于这个答案,向我发出上一个会话的警告是最简单的应用技巧,最好还是在登录前将超时+警告结合起来。是的,但是用户阅读一篇文章可能需要30分钟,并且会被另一个用户在阅读时注销。用户会话/登录显然是一个稀缺的资源。允许用户错误地阻止它(“阅读一篇文章30分钟”)会要求单独记录日志,而不是每个部门一个日志。Patrick Gryciuk解决方案看起来不错!ping