我正在编写我的第一个FireFox扩展,我有一些问题。也许有人可以提供帮助。
我有一个需要登录的网站。登录是每个登录类型一个用户。因此,如果我使用一台PC上的用户名“tom”登录并转到其他PC并尝试使用相同的详细信息登录,则会失败。当我从经过身份验证的页面单击注销按钮时,新位置会执行PHP函数以注销用户(更新MySQL中用户的“已记录”状态)。问题是,如果用户从他的办公桌登录并浏览页面,那么他突然接到朋友的电话,在他休息时间快速抓午餐,并且必须在短时间内见到他,他只需点击X(关闭)来自Firefox的按钮,忘记按下注销按钮,以便记录的状态仍为1.稍后,如果他想再次从主页访问该页面,他将无法使用登录。
所以,我需要以某种方式从firefox中获取“关闭”事件。我正在考虑寻找仅包含“website.com”域名的域名。然后,如果关闭选项卡或关闭Firefox的主窗口,则发送一个唯一的密钥,并且该URL的用户名可以解决用户和问题。我不知道这是否可行。请发布任何想法(如果可以,请跟随代码)以构建此扩展。
谢谢。
答案 0 :(得分:3)
按设计,这是错误的。
如果用户的PC崩溃(硬盘故障,电源故障),您的插件将无法注销用户。因此,用户将无法在任何PC上登录。
-
让我们重新审视这个前提,
一个。为什么从另一台PC登录需要失败?
湾当用户登录到另一台PC时,如何使先前PC的登录失效(注销)。这有点像雅虎等聊天应用程序!信使工作。
根据你的回答,这就是我的建议:如果用户登录另一台PC,警告并向用户提供选项:
答案 1 :(得分:1)
在一段时间不活动后将用户注销是(应用程序或Web)服务器的责任,而不是(仅)客户端浏览器的责任。这称为会话超时。
您可能能够在描述浏览器实现时避免超时,但这不应该是主要解决方案。
这是你可能采取的一种可靠的方法:
在您的情况下,我将在表中包含存储“锁定”状态的时间戳。每次用户执行时间戳更新的操作。当您再次尝试登录广告时,时间戳较旧,某个阈值(例如15分钟)您的登录代码应该默默地注销前一个用户。
答案 2 :(得分:1)
您可以使用ajax来ping网站上的页面 - 所有会话信息都将被传递,您可以验证用户是否仍然打开了活动的浏览器/页面。如果Firefox崩溃,它将无法ping网站,会话可能会在15分钟后超时。我认为允许强制注销另一次登录是最好的。通常当我在一天结束时离开工作时,我不会关闭所有程序或注销或任何东西 - 只需锁定我的电脑以防止任何人使用它。第二天早上,我回来时我的所有程序仍在运行,所以我可以继续我离开的地方。
BTW,Yahoo Web Messenger可能使用某种形式的基于会话的cookie。也就是说,cookie存储在内存中,并在关闭选项卡或浏览器时消失。答案 3 :(得分:1)
要收到关于标签关闭的通知,您需要执行this sample code之类的操作。但是,你不想听负载,而是想听取卸载。
当您最终收到有关卸载的通知时,您将必须像注册Web应用程序一样向注销页面发出请求。您可以通过选中aEvent.originalTarget.location.href
来确定要卸载的文档的位置。请注意,aEvent.originalTarget
将为您提供正在关闭的标签的document
对象。然后,您需要在事件处理程序中使用XLMHttpRequest。
答案 4 :(得分:0)
只需启用用户从其他计算机重新登录即可。如果您在第一台机器上收到用户的请求,请让他重新登录。因此,您一次只能获得一个登录用户。