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