多域名登錄方案思考


場景:

  現有3個域,aa.com,bb.com,cc.com,aa.com 是用戶中心,login.aa.com 是用戶中心的登陸入口,現要求在任何一個域內登錄,其他域不用重復登錄了。

方案:

  我們知道,如果要保證3個域內都同時登陸了,就必須共享登陸的信息,登陸的信息,可以存儲在客戶端,也可以存儲在服務器端,要共享這些信息,就必須要解決多域名下如果同步這些信息的問題,以客戶端為例,我覺得有2種辦法:

  1)對其他的兩個域都設置一個login.xx.com 的這么一個子域(設置這個是為了方便管理),在任何一個網站訪問,點擊登陸的時候,都跳轉到用戶中心的登陸入口login.aa.com 去登陸,登陸成功后設置登陸狀態和驗證信息,

將這些信息寫到這個域的cookie里面,domain=login.aa.com,所有的aa.com域以及子域都能獲取到這個cookie的值,同時向其他的兩個域內寫這個cookie值,

例如:

   <script src="http://login.bb.com/?type=setcookies&s=xxxxxxxxxxxxxxxxxxx">

   <script src="http://login.cc.com/?type=setcookies&s=xxxxxxxxxxxxxxxxxxx">

可以通過jsonp的形式,將加密后的登陸信息直接放到其他的域中,

這樣其他的兩個域以及子域都可以獲得這個用戶的登陸以及驗證信息了,在這兩個域名下就不用再繼續登陸了。

優點:

  在登陸處統一設置登陸相關的cookie,便於統一管理cookie的值以及驗證規則,一次登陸,其他的域名下不用再重新登陸了。登出的時候將各個域里面的包含用戶信息的cookie值清除掉即可。

缺點

  不可預知性,不能預知還是否有其他的域要添加,如果再增加一個域名,我們需要往這個域內寫cookie值,域名比較多的情況下,登陸的時間會有一些長,5個域名之內還好點,總的來說,沒有封閉性。同理,

登出也類似需要處理其他的多個域名

  2)方案二:訪問任何一個網站的時候,也是到login.aa.com 這個登陸入口去登陸,登陸成功后設置登陸用戶的信息和驗證信息,將這些信息寫到cookie中,domain這是為login.aa.com,aa的子域都能獲取到cookie的

值,登陸成功后,然后執行跳轉 http://login.bb.com/login.php?type=setcookie&value=xxxxxxxxxxxxxx&u=http://bb.com/test.html u為跳轉的目的地址  login.bb.com 分析到這個cookie 的值進行存儲,然后跳轉到http://bb.com/test.html面,此事這個頁面已經是登陸狀態了,這就完成了一個登陸過程,如果在cc.com 的頁面訪問的時候,例如訪問 http://cc.com/test.html 的時候,首先會檢查時候存在這個cookie的值,如果這個

值不存在,則發一個跳轉請求到http://login.aa.com/login.php?domain=cc.com&u=http://cc.com/test.html,由於這個時候aa.com這個域已經是登陸狀態,會取得這個域的cookie值,將這個值組裝成一個新的請求,

執行跳轉  http://login.cc.com/login.php?type=setcookie&value=xxxxxxxxxxxxxx&u=http://cc.com/test.html , login.cc.com 分析到這個cookie 的值進行存儲,然后跳轉到http://cc.com/test.html 頁面,

這個時候這個頁面已經是登陸狀態了。這樣也完成了cc域的登陸和信息共享

優點

  可控,登陸的時候縮短,不影響登陸,新增加一個域,操作方便

缺點

  登出時也要清除所有域下的cookie的值 

歡迎大家拍磚,如果有更好的方案,歡迎探討。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM