jquery注销功能
Posted
技术标签:
【中文标题】jquery注销功能【英文标题】:jquery logout function 【发布时间】:2013-10-24 07:01:05 【问题描述】:我在卸载之前使用以下代码注销用户。 我有 3 级身份验证,在二级身份验证页面中我注入了此代码。如果用户是 2 因素身份验证用户,用户将在我注入代码的页面处停止,如果用户关闭浏览器用户将被注销/会话将被终止。 但是,如果用户通过 2 级身份验证,我会看到弹出窗口,因为您已注销并且用户可以登录。我需要的是:在关闭事件时,只有弹出窗口才会出现。
我使用了 window.onbeforeunload、window.onunload 和所有其他选项,它不适用于某些浏览器。 请提出建议。
var timeoutID;
$(window).bind("beforeunload", function()
logout();
timeoutID = window.setTimeout(displayMessage(),500);
);
function logout()
window.location.href = "logout url";
function displayMessage()
window.alert( "You are loggedout" );
【问题讨论】:
您不能在beforeunload
事件上重定向用户。将非异步 ajax 请求发送到将注销用户的脚本。更好的是,使用会话 cookie。
【参考方案1】:
timeoutID = window.setTimeout(displayMessage(),500);
应该是:
timeoutID = window.setTimeout(displayMessage,500);
setTimeout
的第一个参数必须是函数。您正在调用函数而不是传递函数本身。这就是弹出警报的原因。
但是,由于您可以在 beforeunload
处理程序中执行的操作受到限制,这仍然有效。这只是为了向您展示创建超时函数的正确语法。
【讨论】:
您不能在 beforeunload 中使用计时器,因为页面将在运行前关闭。 @jfriend00 谢谢。我更新了答案以明确表示我只是在帮助他理解正确的setTimeout
语法,而不是真正解决他的最终问题。
不走运。当我现在关闭窗口时,它没有显示弹出窗口。通过显示此弹出窗口,我将有时间在后端终止会话。所以出于这个原因,我添加了 setTimeout。还有其他替代解决方案吗?
你看jfriend00的回答了吗?您误解了“这行不通”的哪一部分?【参考方案2】:
在 beforeunload 处理程序中不能做的两件事是:
-
将用户重定向到其他页面(浏览器不允许)。
设置一个将在未来某个时间运行的计时器(页面已经关闭,因此没有未来的时间)。
因此,您在 beforeunload 处理程序中尝试做的任何事情都不会起作用。 (仅供参考,在 beforeunload 中还有其他限制,例如您不能使用 prompt()
或 alert()
等……但这是您正在做的两个)。
您没有说明如何跟踪登录/注销,因此我们很难确切知道该建议什么。当浏览器关闭时,会话 cookie 将自动过期。可以在 beforeunload 处理程序中轻松清除常规 cookie。
【讨论】:
以上是关于jquery注销功能的主要内容,如果未能解决你的问题,请参考以下文章