我的项目中有要求在会话到期之前通知用户会话到期。我已经使用setTimeout在jquery中实现了这个。它工作正常,直到用户在单个选项卡中工作。如果保持打开多个标签,则会出现问题。在这种情况下,即使用户正在使用选项卡,因为其他选项卡处于非活动状态,警报也会显示在这些非活动选项卡上。这不应该发生,因为用户在一个选项卡上处于活动状态。
我使用的代码如下:
function SessionExpireAlert() {
var timeout = 20000;
var seconds = timer / 1000;
document.getElementsByName("seconds").innerHTML = seconds;
setInterval(function () {
seconds--;
document.getElementById("seconds").innerHTML = seconds;
},1000);
setTimeout(function () {
//Show Popup before 20 seconds of timeout.
$find("mpeTimeout").show();
}, timeout - 19 * 1000);
setTimeout(function () {
window.location = "Default.aspx";
}, timeout);
};
function ResetSession() {
//Redirect to refresh Session.
window.location = window.location.href;
}
function ResetTimers() {
clearTimeout(seconds);
SessionExpireAlert
}
我很高兴有任何建议......
答案 0 :(得分:0)
在我看来,如果用户会话是由应用程序服务器保存的,那么在客户端代码中设置这种类型的控件不是一个好习惯 (因为非常难以控制并与服务器端保持同步,如asp.net会话时间戳)。
最好创建一个Web API,或者像signalR这样的库同步,以检索当前的用户信息。这里,将是会话超时值。
每次用户更改站点位置或每次需要时,您都可以调用此API并检索该值,并在页面上将其显示为计时器。 当然,您也可以通过api调用强制通过客户端重置会话时间戳。