Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在用户离开页面之前与服务器同步并清除会话?_Javascript_Ajax_Session_Local Storage - Fatal编程技术网

Javascript 如何在用户离开页面之前与服务器同步并清除会话?

Javascript 如何在用户离开页面之前与服务器同步并清除会话?,javascript,ajax,session,local-storage,Javascript,Ajax,Session,Local Storage,是否有任何方法可以检测用户何时离开页面,无论是关闭浏览器、在地址栏中输入新URL、单击重定向到其他域的链接等 其主要目的是执行一些活动,例如: 与服务器同步驻留在客户端的某些数据 清除服务器会话 我正在尝试窗口的卸载和卸载前事件,并阅读其他问题,如: // 但是我没有找到我期望的答案 下面是一个简化的js代码片段,以了解我的尝试: window.onunload = function(){ if (theConditionThatINeed){ doThings();

是否有任何方法可以检测用户何时离开页面,无论是关闭浏览器、在地址栏中输入新URL、单击重定向到其他域的链接等

其主要目的是执行一些活动,例如:

  • 与服务器同步驻留在客户端的某些数据
  • 清除服务器会话
我正在尝试窗口的卸载和卸载前事件,并阅读其他问题,如: // 但是我没有找到我期望的答案

下面是一个简化的js代码片段,以了解我的尝试:

window.onunload = function(){
    if (theConditionThatINeed){
        doThings();
        SyncWithServerAndAbandonSession(url, localObjects);
    }
    else {
        doNothing();
    }
}
我不想在用户离开之前显示任何形式的确认,因此我认为onbeforeunload在这里对我没有帮助

假设答案是“没有办法做这样的事情”,那么建议采用什么方法来完成我想要的同步和会话清除


我支持的主浏览器是IE>=7

正如您已经阅读的,无法可靠地检测用户是否离开您的页面。 通常,在客户端存储任何非同步状态都不是一个好的做法。浏览器很容易关闭或崩溃

您可以通过javascript向自己发送ajax keepalive消息,以防用户在您的页面上执行任何操作。同样,非常不可靠,浪费和黑客。 短时间超时后自动同步

看一看ful的web应用程序。这个概念很有趣,而且从表面上讲,不鼓励在服务器上保留状态信息。您也可以将此应用于客户端

这通常会导致在URL中保留状态信息。URL告诉服务器服务请求所需的任何信息,它不应该需要任何先前活动的内存(会话)。 我尝试在会话中只保留用户标识信息。我也会去掉这个,但是一些工具和lib需要会话中的用户