Facebook如何管理用户会话?

时间:2017-05-29 04:06:28

标签: javascript facebook session web-applications

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

1 个答案:

答案 0 :(得分:1)

messenger.comfacebook.com发出ajax请求,并在用户登录时获取信息。

messenger.com中进行身份验证后,您将拥有一个独立于facebook.com会话的新会话。

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

POST https://www.facebook.com/login/async_sso/messenger_dot_com/?dpr=1&__a=1

此端点允许messenger.com发出跨源请求(因为此响应标头):

access-control-allow-origin: https://www.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会发送userid: "0"返回:

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