2009-07-17 101 views
1

有誰知道我是否可以爲當前域設置會話值,並將此會話用於其他域?爲來自同一服務器的不同域設置會話?

例如:

,當我在域www.aabc.com集會議,並預祝本次會議領域www.ccc.com工作,以及 - 我在www.aabc.com點擊一個按鈕並將標題更改爲www.ccc.com?

回答

2

您只能爲您的網域(以及您網域上的其他網站,如子網域,如果我沒有記錯的話)設置Cookie。

這是(主要是?)出於安全原因:意外,任何人都可以對任何網站設置cookies ......我讓你想象的混亂^^

(用戶設置Cookie的另一個域的唯一方法似乎通過利用瀏覽器的安全漏洞 - 例如http://en.wikipedia.org/wiki/Cross-site_cooking;因此,在正常情況下,不可能 - 愉快地)

+0

對不起,我的問題是設置會話的差異域... – 2009-07-17 05:24:29

2

您不能直接訪問兩個域會話,但是,有兩個站點之間傳遞會話數據的合法解決方案你控制。對於可能被篡改的數據,只需在域abc.com上放置一個頁面,即可在xyz.com上加載1px x 1px「image」,並在查詢字符串中傳遞適當的數據。這是非常不安全的,所以請確保用戶不會因篡改而破壞任何內容。

另一種選擇是使用某種通用存儲。如果他們有權訪問相同的數據庫,則可以是域abc.com存儲記錄的表,然後將該記錄的id傳遞到域xyz.com。如果您嘗試傳遞登錄信息,這是更合適的方法。只要確保你混淆了ID,這樣用戶就無法猜測另一個記錄ID。

如果這兩個域位於不同的服務器上或無法訪問同一個數據庫,則使用公用存儲方法的另一種方法是實現某種緩存存儲服務,該服務將一段時間存儲信息並且可由兩個域訪問。域abc.com傳遞一些數據,並且服務將域abc.com發送到域xyz.com的標識傳遞迴服務請求數據。同樣,如果您自己開發此服務,請確保您混淆了ID。

3

我不得不在我上一份工作上做這件事。它的處理方式是通過一些揮手和半安全的散列傳遞。

基本上,每個站點,站點A和站點B,在每個域上都有相同的網關設置。網關接受user IDtimestampredirect URLhashhashshared key,timestamp,user ID組成。

站點A生成哈希,並將上面列出的所有信息發送到站點B的網關。站點B然後將收到的傳遞user IDtimestampshared key哈希。

如果生成的哈希值與接收到的哈希匹配,那麼網關會將用戶登錄並從共享內存表或memcached池加載其會話,並將用戶重定向到收到的redirect url

最後,timestamp用於確定所提供的傳遞的hash的過期時間(例如:散列僅對x時間有效)。 2.5分鐘左右的時間就是我們用於TTL的時間(考慮到網絡滯後,也許是一兩次刷新)。

這裏的關鍵點是:

  • 具有共享資源,其中會話可序列化
  • 使用共享密鑰來創建並確認散列(如果你要使用MD5,做多遍)
  • 只允許哈希在一小段但合理的時間內有效。
  • 這需要控制這兩個域。

希望有幫助。