3

关闭选项卡时我需要清除会话变量,但到目前为止我找不到任何解决方案。我得到的最接近的是使用“onbeforeunload”函数是javascript。

<body onbeforeunload='destroySession()'>
    <!--Codes for the site includeing php scripts-->
</body>
<script type='text/javascript'>
    function destroySession(){
        $.ajax({
           url: "destroySession.php"
        });
     }
<script>

问题是每次单击、刷新或提交表单时都会调用该函数。有没有更好的方法在关闭选项卡时销毁会话变量,或者我做错了什么?请帮忙。

4

3 回答 3

4

没有安全的方法来处理您要查找的内容。每次离开页面时都会执行 onbeforunload 事件。(昨天我的一个项目遇到了类似的问题)。您可以获得的最接近的是控制用户离开页面的方式。

请参阅lan 在某些评论中发布的此链接。并检查Daniel Melo的答案,您可以从这个问题的解决方案中获得尽可能接近的答案。

我也找到了这个链接,但它基本上是提取stackoverflow中给出的答案。

希望这可以帮助。

于 2013-08-16T15:09:37.880 回答
1

不幸的是,没有办法阻止页面刷新(由表单提交或任何其他导航引起)调用“onbeforeunload”。

于 2013-08-16T14:58:49.413 回答
-1

是的,你可以做到,

</head>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript" language="javascript">

var validNavigation = false;

function endSession() {
// Browser or broswer tab is closed
// Do sth here ...
alert("bye");
}

function wireUpEvents() {
/*
* For a list of events that triggers onbeforeunload on IE
* check http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx
*/
window.onbeforeunload = function() {
  if (!validNavigation) {
     endSession();
  }
 }

// Attach the event keypress to exclude the F5 refresh
$(document).bind('keypress', function(e) {
if (e.keyCode == 116){
  validNavigation = true;
}
});

// Attach the event click for all links in the page
$("a").bind("click", function() {
validNavigation = true;
});

 // Attach the event submit for all forms in the page
 $("form").bind("submit", function() {
 validNavigation = true;
 });

 // Attach the event click for all inputs in the page
 $("input[type=submit]").bind("click", function() {
 validNavigation = true;
 });

}

// Wire up the events as soon as the DOM tree is ready
$(document).ready(function() {
wireUpEvents();  
}); 
</script>    
</head>
<body>
<h1>Eureka!</h1>
  <a href="http://www.google.com">Google</a>
  <a href="http://www.yahoo.com">Yahoo</a>
</body>
</html>
于 2013-08-16T15:18:07.767 回答