Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Ajax 一个github选项卡如何知道我何时在另一个上注销_Ajax_Session_Websocket_Server Sent Events - Fatal编程技术网

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

Ajax 一个github选项卡如何知道我何时在另一个上注销,ajax,session,websocket,server-sent-events,Ajax,Session,Websocket,Server Sent Events,复制: 打开两个都已登录的github选项卡 从一个选项卡中注销 在第二个选项卡的顶部,您几乎会立即收到您在另一个选项卡上注销的通知 我一直在想这是怎么回事。由于通知几乎是即时的,我考虑了3种可能性: 每个选项卡都按计划发出XHR/AJAX请求,以检查与服务器的会话有效性(或使用长轮询) 每个选项卡向服务器发送的事件注册一个事件侦听器,并在注销时从服务器接收通知 每个选项卡都有一个到服务器的websocket连接,并接收类似的通知 这些技术仅供参考。但我很困惑,因为当我打开web浏览器(Fire

复制:

  • 打开两个都已登录的github选项卡
  • 从一个选项卡中注销
  • 在第二个选项卡的顶部,您几乎会立即收到您在另一个选项卡上注销的通知
  • 我一直在想这是怎么回事。由于通知几乎是即时的,我考虑了3种可能性:

  • 每个选项卡都按计划发出XHR/AJAX请求,以检查与服务器的会话有效性(或使用长轮询)
  • 每个选项卡向服务器发送的事件注册一个事件侦听器,并在注销时从服务器接收通知
  • 每个选项卡都有一个到服务器的websocket连接,并接收类似的通知
  • 这些技术仅供参考。但我很困惑,因为当我打开web浏览器(Firefox 48 beta版)的网络请求开发工具时,我在显示从另一个选项卡注销到通知出现之间的通知的选项卡上看不到任何通信


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

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

    还有一个澄清:实际上有本地存储修改事件,GitHub很可能会使用它。有趣;我没想到。如果我手动(使用Firefox中的开发工具)将本地存储值从“true”更改为“false”,则不会出现弹出窗口。为什么呢?可能是Firefox在更改本地存储时没有将适当的事件触发到焦点选项卡。或者GitHub使用一些专用于Firefox的机制。不管怎样,如果你打开两个或更多的标签,效果很好。@AntonOnipko谢谢你回答我的问题。我可以确认,如果我在Firefox中关闭本地存储(通过在
    about:config
    中禁用
    dom.Storage.enabled
    ),Github在我登录/注销另一个选项卡时不再发出通知。