【问题标题】:How to sync with server and clear session before the user leaves a page?如何在用户离开页面之前与服务器同步并清除会话?
【发布时间】:2011-12-07 01:50:04
【问题描述】:

是否有任何方法可以检测用户何时离开页面,无论是通过关闭浏览器、在地址栏中输入新 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 sn-p 来理解我在尝试什么:

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

我不想在用户离开之前显示任何形式的确认,所以我认为 onbeforeunload 在这里对我没有帮助。

假设答案是“没有办法做这样的事情”,完成我想要的同步和会话清除的推荐做法是什么?

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

【问题讨论】:

    标签: javascript ajax session local-storage


    【解决方案1】:

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

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

    看看RESTful 网络应用程序。这个概念很有趣,而且从表面上讲,不鼓励在服务器上保存状态信息。您也可以将其应用于客户端。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多