Javascript Facebook如何管理用户会话?

Javascript Facebook如何管理用户会话?,javascript,facebook,session,web-applications,Javascript,Facebook,Session,Web Applications,我有点好奇Facebook是如何在不同的网络应用程序(Facebook和Messenger)中管理用户会话的。当我进入Messenger web应用程序时,它知道我已登录Facebook并允许我使用该应用程序。我想知道哪些技术可以让我实现这一点(可能是Redis?),或者它们如何共享同一个会话?messenger.com向facebook.com发出ajax请求,并获取用户是否登录的信息 一旦您在messenger.com中通过身份验证,您将拥有一个独立于facebook.com会话的新会话 可

我有点好奇Facebook是如何在不同的网络应用程序(Facebook和Messenger)中管理用户会话的。当我进入Messenger web应用程序时,它知道我已登录Facebook并允许我使用该应用程序。我想知道哪些技术可以让我实现这一点(可能是Redis?),或者它们如何共享同一个会话?

messenger.com
facebook.com
发出ajax请求,并获取用户是否登录的信息

一旦您在
messenger.com
中通过身份验证,您将拥有一个独立于
facebook.com
会话的新会话

可以在开发人员工具的“网络”选项卡中看到发出的请求:

POST https://www.facebook.com/login/async_sso/messenger_dot_com/?dpr=1&__a=1
此端点允许
messenger.com
发出跨源请求(由于此响应标头):

x-auth-result
中,有关Facebook帐户的信息以base64格式发送,并使用
JSON.parse(atob(…)
解析

例如,我的是这样的:

X-Auth-Result: eyJ1c2VyaWQiOi....sd1EifQ==
然后他们会:

var n = m.getResponseHeader('X-Auth-Result');
if (n) {
    var o = JSON.parse(atob(n));
    c('Arbiter').inform('messengerdotcom_fb_session_info', o);
}
在我的例子中,
o
将如下所示:

{
    "userid": "1000....756",
    "name": "Ionică Bizău",
    "secret": "P0....r",
    "persistent": true,
    "initial_request_id": "AfU...lwQ"
}
然后,他们最终可以在按钮中显示您的全名

当用户未登录时,Facebook将发送一个
用户ID:“0”
返回:

{
  "userid":"0",
  "initial_request_id":"A6...YOd"
}

回答得好!谢谢你的时间!他们如何在浏览器中的两个域之间共享初始数据?@Qamar没错:
messenger.com
facebook.com
获取初始数据(
facebook.com
在此上下文中受
messenger.com
信任)。
{
  "userid":"0",
  "initial_request_id":"A6...YOd"
}