一个 github 选项卡如何知道我何时在另一个选项卡上注销

How does one github tab knows when I logged out on another

要复制:

  1. 打开你们都登录的两个 github 标签页
  2. 注销一个选项卡。
  3. 在第二个选项卡的顶部,您几乎会立即收到您在另一个选项卡上注销的通知

我一直在努力弄清楚它是如何工作的。由于通知几乎是即时的,我考虑了 3 种可能性:

  1. 每个选项卡按计划发出 XHR/AJAX 请求以检查与服务器的会话有效性(或使用长轮询)
  2. 每个选项卡都向服务器发送的事件注册一个事件侦听器,并在注销时从服务器接收通知。
  3. 每个选项卡都有一个到服务器的 websocket 连接,并收到类似的通知。

作为参考,这些技术是discussed here。不过,我很困惑,因为当我打开网络浏览器的 (Firefox 48 beta) 网络请求开发工具时,我在从我注销另一个选项卡到通知出现之间没有看到显示通知的选项卡上的任何通信。

顺便说一句,通知也以相反的方向工作。如果您注销了两个选项卡,然后登录了其中一个,则您登录的另一个选项卡上会立即弹出一条通知。这是怎么回事?

Github 使用本地存储来实现这一技巧。它使用键为 'logged-in' 的条目。此键为 true 或 false,每次用户登录时都会设置 in/out。每个选项卡不断检查(据我所知没有本地存储修改事件)本地存储。