我的网站设置了超时,因此在活动15分钟后会出现一个登录屏幕,要求您刷新会话。
这很有效,但如果您在网站上打开了多个窗口,则表示将使用登录详细信息刷新一个页面,但另一个页面将不会刷新。
所以问题是,有没有办法在网站上打开的每个窗口上执行以下代码?
$jq('#loginbox').hide()
感谢您的帮助。我还应该声明其他窗口不会通过JavaScript打开,用户可以在链接的新窗口/标签中单击打开
答案 0 :(得分:3)
您无法使用JS访问自己未打开的窗口。
每个窗口都应检测到它超时并显示登录对话框。如果用户在窗口A中登录,则窗口B应该轮询服务器以检测是否已创建会话,并在该情况下恢复自身。
答案 1 :(得分:2)
在切换到刷新屏幕(弹出窗口?)之前,您只需对服务器执行ajax调用即可查看用户上次刷新的时间 - 如果用户仍然合法登录,只需将计时器重置为正确的时间
答案 2 :(得分:1)
如果未通过JavaScript打开其他窗口,您将无法以编程方式访问它。换句话说,原始窗口无法在另一个窗口中调用JavaScript函数。
但是,如果窗口具有相同的域(如果它们位于同一网站上),则窗口可以共享cookie。因此,一种可能性是让另一个窗口轮询更新会话cookie,原始窗口可以写入。一旦会话cookie获得特定值,另一个窗口就可以检测到此更改并按您认为合适的方式做出反应。
答案 3 :(得分:0)
感谢所有发布创意的人,我选择了以下解决方案,如果有人可以增强它并发布代码,那么我会接受这个答案:
$jq(function(){
$jq(window).bind('blur', function(){checkloginrefreshed();});
$jq(window).bind('focus', function(){checkloginrefreshed();});
$jq(document).bind('focusout', function(){checkloginrefreshed();});
$jq(document).bind('focusin', function(){checkloginrefreshed();});
});
function createCookie(name,value,hours) {
if (hours) {
var date = new Date();
date.setTime(date.getTime()+(hours*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
function checkloginrefreshed(){
if (parseInt(readCookie("loginset")) == 1){
eraseCookie("loginset");
$jq('#timeoutwarning').dialog("close");
$jq('#timeoutwarning').html(TIMEOUTLOGINFORM);
clearTimeout(timer);
clearTimeout(timerWarning);
setupTimers();
}
}