首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Facebook如何管理用户会话?

Facebook如何管理用户会话?
EN

Stack Overflow用户
提问于 2017-05-29 04:06:28
回答 1查看 1.7K关注 0票数 4

我对Facebook如何在不同的网络应用程序(Facebook和Messenger)中管理用户会话感兴趣。当我进入Messenger web应用程序时,它知道我登录了Facebook,并允许我使用该应用程序。我想知道哪种技术能让我做到这一点(也许是Redis?)或者他们怎么能共享同一个会话?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-29 04:39:46

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

一旦在messenger.com中进行了身份验证,就会有一个独立于facebook.com会话的新会话。

所提出的请求可以从developer tools的Network选项卡中看到:

代码语言:javascript
代码运行次数:0
运行
复制
POST https://www.facebook.com/login/async_sso/messenger_dot_com/?dpr=1&__a=1

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

代码语言:javascript
代码运行次数:0
运行
复制
access-control-allow-origin: https://www.messenger.com

x-auth-result中,关于Facebook帐户的信息是用base64发送的,并使用JSON.parse(atob(...))进行解析。

例如,我的是这样的:

代码语言:javascript
代码运行次数:0
运行
复制
X-Auth-Result: eyJ1c2VyaWQiOi....sd1EifQ==

然后他们就会:

代码语言:javascript
代码运行次数:0
运行
复制
var n = m.getResponseHeader('X-Auth-Result');
if (n) {
    var o = JSON.parse(atob(n));
    c('Arbiter').inform('messengerdotcom_fb_session_info', o);
}

在我的例子中,o将是这样的:

代码语言:javascript
代码运行次数:0
运行
复制
{
    "userid": "1000....756",
    "name": "Ionică Bizău",
    "secret": "P0....r",
    "persistent": true,
    "initial_request_id": "AfU...lwQ"
}

然后,他们终于可以在按钮中显示你的全名了。

当用户未登录时,Facebook将发回一个userid: "0"

代码语言:javascript
代码运行次数:0
运行
复制
{
  "userid":"0",
  "initial_request_id":"A6...YOd"
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44234442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档