0

我在卸载之前使用下面的代码来注销用户。我有 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" );
}
4

2 回答 2

0
timeoutID = window.setTimeout(displayMessage(),500);

应该:

timeoutID = window.setTimeout(displayMessage,500);

的第一个参数setTimeout必须是一个函数。您正在调用函数而不是传递函数本身。这就是为什么弹出警报的原因。

但是,由于您可以在beforeunload处理程序中执行的操作受到限制,这仍然有效。这只是为了向您展示创建超时函数的正确语法。

于 2013-10-24T07:06:26.047 回答
0

在 beforeunload 处理程序中不能做的两件事是:

  1. 将用户重定向到不同的页面(浏览器不允许)。
  2. 设置一个将在未来某个时间运行的计时器(页面已经关闭,因此没有未来的时间)。

因此,您在 beforeunload 处理程序中尝试做的任何事情都不会起作用。(仅供参考, beforeunload 也有其他限制,例如您不能使用prompt()oralert()等​​……但这是您正在做的两个)。

您没有说明如何跟踪登录/注销,因此我们很难确切知道该建议什么。当浏览器关闭时,会话 cookie 将自动过期。可以在 beforeunload 处理程序中轻松清除常规 cookie。

于 2013-10-24T07:12:58.750 回答