2017-05-29 108 views
1

我對Facebook如何在不同的網絡應用(Facebook和Messenger)中管理用戶會話很感興趣。當我進入Messenger Web應用程序時,它知道我已登錄Facebook並讓我使用該應用程序。我想知道哪些技術可以讓我達到這個目標(Redis可能?)或者他們如何共享同一個會話?Facebook如何管理用戶會話?

回答

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" 
} 
+0

偉大的答案!謝謝你的時間! –