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

时间:2011-10-13 15:24:34

标签: javascript ajax session local-storage

有没有办法检测用户何时离开页面,无论是关闭浏览器,在地址栏中输入新URL,点击重定向到其他域的链接等等?

这样做的主要目的是执行一些活动,例如:

  • 与服务器同步一些驻留在客户端的数据
  • 清除服务器会话

我正在尝试使用窗口的卸载和beforeunload事件,并阅读其他问题,例如: Best way to detect when a user leaves a web page?  // Is there any way to know that user leaving a page with asp.net?但我找不到我期望的答案。

这是一个简化的js片段,用于理解我的尝试:

window.onunload = function(){
    if (theConditionThatINeed){
        doThings();
        SyncWithServerAndAbandonSession(url, localObjects);
    }
    else {
        doNothing();
    }
}

我不希望在用户离开之前显示任何类型的确认,所以我认为 onbeforeunload 对我没有帮助。

假设答案是“无法做到这一点”,那么完成同步和会话清算的建议做法是什么?

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

1 个答案:

答案 0 :(得分:1)

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

如果用户在您的网页上执行任何操作,您可以通过javascript向自己发送ajax keepalive消息。再次,非常不可靠,浪费和hacky。 短暂超时后自动同步。

查看REST个完整的网络应用程序。这个概念很有意思,并且非常简洁地说,不鼓励在服务器上保存状态信息。您也可以将此应用于客户端。

这通常会导致将状态信息保存在URL中。 URL告诉服务器为服务请求需要知道的任何内容,它不需要任何先前活动的内存(会话)。 我尝试仅在会话中保留用户标识信息。我也会摆脱这个,但是一些工具和库需要会话中的用户。