多網域名稱 跨域 登入資訊共享解決方案亂彈

2021-08-25 10:24:36 字數 1131 閱讀 3695

現有需求如下: login.nx.com 是 nx.com 的二級網域名稱, login.nx.com 是 nx.com 的登入中心應用,現在有兩個拍馬屁的** (sb.com 、 sx.com) 想跟 nx.com 共享登入,分享一下 nx.com 的使用者資源,現在的整合登入的目標是 : 任何一家**登入後,到其他**後都不需要再重新登入,姑且叫做良民通行證吧, (souhu 人家也是這麼叫的 )

我們都知道,要共享登入,一般情況下是需要共享應用 session 中的資訊的,而 session 儲存一般都是只在單台伺服器的記憶體中的,其他伺服器上的應用需要共享只有通過複製的方式,這是效率低下的,可以進行 session 改造 , 這裡不具體討論這個問題,可以參考《sna session剖析》

。通過上面一篇文章我們知道,登入相關資訊可以儲存在服務端,也可以儲存在客戶端,要和其他站點共享這些資訊,就需要解決如何在所有站點下同步這些資訊的問題,而解決同步的關鍵又在要解決跨域問題,以服務端儲存為例:

客戶端 cookie 中只有 sessionid ,登入相關資訊全部在服務端,通過 sessionid 在服務端即可獲取登入資訊,可以這麼理解,只要 sb.com 、 sx.com 、 nx.com 具有相同的 sessionid ,那麼在服務端他們就可以根據相同 sessionid 拿到登入狀態,也就共享了登入資訊,基於這個思路,解決方案有如下兩個,各有優缺點:

1、 瀏覽器訪問任何乙個未登入**都跳轉到 login.nx.com 登入中心進行登入,登入成功後設定登入狀態,並設定 cookie 儲存 sessionid ,其中 domain=.nx.com, 此時 ,nx.com 包括其子網域名稱都能成功獲取到 sessionid ,同時返回給客戶端其他需要共享登入的網域名稱列表,假設如下 ( 這裡除了使用 script ,其實 ajax 相關的技術都可以 , 例如 iframe 、 img, xhr, 另外注意下 p3p 的問題 ) :

這裡訪問 /pass 目的只有乙個,就是將 sessioinid 給相應的網域名稱,然後 /pass 接收到 sessionid 後寫入到自己網域名稱下 cookie 中,這樣 sx.com 、 sb.com 網域名稱下都有了這個 sessionid ,好, cookie 設定大功告成,然後該頁面再 redirect 到其他應該去的頁面。只要在這幾個網域名稱下,就不需要再重新登入。

多網域名稱 跨域 登入資訊共享解決方案亂彈

現有需求如下 login.nx.com 是nx.com 的二級網域名稱,login.nx.com 是nx.com 的登入中心應用,現在有兩個拍馬屁的 sb.com sx.com 想跟nx.com 共享登入,分享一下 nx.com 的使用者資源,現在的整合登入的目標是 任何一家 登入後,到其他 後都不...

跨域解決方案

因為瀏覽器出於安全考慮,有同源策略。也就是說,如果協議 網域名稱或者埠有乙個不同就是跨域,ajax 請求會失敗。那麼是出於什麼安全考慮才會引入這種機制呢?其實主要是用來防止 csrf 攻擊的。簡單點說,csrf 攻擊是利用使用者的登入態發起惡意請求。也就是說,沒有同源策略的情況下,a 可以被任意其他...

跨域解決方案

瀏覽器端的同源策略 如果兩個頁面的協議,埠和網域名稱中的其中任意乙個不相同,它們就是不同源的,瀏覽器會限制他們之間的資源互動 跨域 跨域的安全限制只針對瀏覽器,伺服器是沒有跨域的安全限制的 原理 由於伺服器沒有跨域限制,所以在需要跨域訪問時,在中間設定乙個中間層 舉例 192.168.10.1 80...