繁体   English   中英

会话在浏览器窗口关闭后未过期-Javascript

[英]Session not expiring after browser window close- Javascript

 <script> function ServerPing(){ var url = "http://localhost:8080/index.html"; if (window.XMLHttpRequest){ reqXML = new XMLHttpRequest(); reqXML.onreadystatechange = HandlePing; reqXML.open("GET", url, true); reqXML.send(null); } else if(window.ActiveXObject){ reqXML = new ActiveXObject("Microsoft.XMLHTTP"); if(reqXML){ reqXML.onreadystatechange = HandlePing; reqXML.open("GET", url, true); reqXML.send(null); } } else{ window.location.href = url; } } function HandlePing(){ window.status = "Pinging Server - state: " + reqXML.readyState; if(reqXML.readyState == 4){ var strDate = new Date().toString(); if(reqXML.status == 200){ window.status = "Sucessfull Ping at " + strDate; } else{ window.status = "Failed Ping at " + strDate; } } } window.onload = function(){ var timer = setInterval("ServerPing()",10000) } </script> 
 <HTML> <HEAD> <TITLE> Test</TITLE> <script> function ServerPing(){ var url = "http://localhost:8383/fcpbweb/index.html"; if (window.XMLHttpRequest){ reqXML = new XMLHttpRequest(); reqXML.onreadystatechange = HandlePing; reqXML.open("GET", url, true); reqXML.send(null); } else if(window.ActiveXObject){ reqXML = new ActiveXObject("Microsoft.XMLHTTP"); if(reqXML){ reqXML.onreadystatechange = HandlePing; reqXML.open("GET", url, true); reqXML.send(null); } } else{ window.location.href = url; } } function HandlePing(){ window.status = "Pinging Server - state: " + reqXML.readyState; if(reqXML.readyState == 4){ var strDate = new Date().toString(); if(reqXML.status == 200){ window.status = "Sucessfull Ping at " + strDate; } else{ window.status = "Failed Ping at " + strDate; } } } window.onload = function(){ var timer = setInterval("ServerPing()",10000) } </script> </HEAD> <BODY> <div style="height:300px; width:400px; overflow:hidden; border:1px solid red;"> <p style="margin:117px auto 0 auto; width:150px">TEST CONTENT</p> </div> </BODY> </HTML> 

当我关闭浏览器选项卡时,我的会话不会在IE8,chrome和firefox中过期,在IE9中可以正常工作。 我主要是JSP。

HTML:

<body onbeforeunload="HandleOnClose()"></body>

JS代码:

function HandleOnClose(){

    if (event.clientY < 0) {
                        //event.returnValue = 'Want to leave the page?';
                      location.href=location.protocol+"//"+location.host+"${ctx}/"+logoutLocation;
                    }
                }

我也参考了下面的链接,但没有用。

window.onunload在Chrome浏览器中无法正常工作。 谁能帮我?

我也在使用Prototypejs框架。 我也欢迎其他解决方案。

提前致谢。

用户关闭选项卡时,无法可靠地通知服务器。 根本就没有API。 您的示例代码有几个问题,尤其是试图强迫用户到onbeforeunload处理程序中的新位置是无聊的网站使用的一种众所周知的策略,因此好的浏览器会忽略它。 而且即使刷新操作(而不是关闭选项卡)也将触发您的处理程序。

如果您需要在用户离开您的页面时主动终止会话,那么这样做的唯一可靠方法是让您的页面在活动时定期对服务器执行ping操作,然后在X中未执行ping操作时让服务器终止会话分钟。 请注意,当一个选项卡处于打开状态但在后台时,许多浏览器都会限制该选项卡的计时器触发的程度,因此您需要尝试使用目标浏览器来为服务器端超时找到合适的间隔。

最后,我使用AJAX / XMLHttpRequest从以下链接进行了相同的操作:

关闭浏览器时如何结束用户会话

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM