2017-05-29 6 views
1

私は、FacebookがさまざまなWebアプリケーション(FacebookとMessenger)でユーザーセッションをどのように管理しているかに興味を持っています。私がMessenger Webアプリに入ると、Facebookにログインしていることが分かり、このアプリを使用できるようになります。私はどの技術が私にそれを達成させるかを知りたいのですが(Redisかもしれませんか?)、または彼らがどのように同じセッションを共有することができますか?Facebookはどのようにユーザーセッションを管理していますか?

答えて

1

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ことを可能にする:

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

とし、彼らは最終的にあなたのフルネームをボタンに表示することができます。

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

グレート答え:ユーザーがログインしていない場合は

、Facebookはuserid: "0"バックを送信します!御時間ありがとうございます! –

関連する問題