当我登出另一个时,一个github选项卡如何知道

时间:2016-07-11 04:51:46

标签: ajax session websocket server-sent-events

要复制:

  1. 打开两个已登录的github标签
  2. 退出一个标签页。
  3. 在第二个标签的顶部,您几乎会立即收到您在其他标签页上注销的通知
  4. 我一直试图弄清楚这是如何运作的。由于通知几乎立即,我考虑了3种可能性:

    1. 每个标签按计划发出XHR / AJAX请求,以检查服务器的会话有效性(或使用长轮询)
    2. 每个选项卡都会向Server Sent Events注册一个事件侦听器,并在注销时从服务器接收通知。
    3. 每个标签都有一个与服务器的websocket连接,并收到类似的通知。
    4. 作为参考,这些技术是https://github.com/infinitered/redpotion/issues/164。我很难过,因为当我打开网络浏览器(Firefox 48 beta)网络请求开发工具时,我看到选项卡上没有通信,显示我退出其他选项卡的时间与时间之间的通知通知出现。

      顺便说一下,通知也是相反的。如果您注销了两个选项卡,并且您登录其中一个选项卡,则会立即在您登录的另一个选项卡上弹出通知。发生了什么?

1 个答案:

答案 0 :(得分:3)

Github使用本地存储来实现此技巧。它使用带有“登录”键的条目。此密钥为true或false,并在每次用户登录/注销时设置。每个选项卡都会不断检查(据我所知,本地存储修改没有事件)本地存储。