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注销功能的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC:登录和注销功能?

OneLogin SAML 注销功能

android中的注销功能

django rest框架json web token注销功能

JS实现注销功能

AngularJS客户端的注销功能