2013-11-04 33 views
0

所以這裏是情況:跨子域和根域的會話管理?

我有api.localhost和localhost。

api.localhost - 用於DB訪問和會話管理的REST API。

localhost - 依賴api.localhost的簡單Web應用程序。

現在我的問題是: 1.如何設置cookie,以便本地主機也可以訪問api.localhost設置的cookie。 (我用的護照和MongoStore會話管理)

  1. 當本地主機接收到餅乾,我做一個HTTP請求到api.localhost以檢查其真實性。我如何發送與該請求一起收到的Cookie?

PS。 - 相信我,我非常努力地以最簡單的方式解釋問題。

+0

本地主機Web應用程序是否連接到api.localhost服務器端或從瀏覽器? – hgoebl

回答

1

您必須使用數據庫。明確地說,你必須將會話存儲在數據庫中。如果您的域和所有子域讀取單個數據庫,則用戶可以從不同域訪問相同的會話。

默認情況下,HTTP客戶端(瀏覽器)不允許從跨域讀取cookie。所以你必須在你的cookie中明確地設置域名信息。

Let me explain clear, 

讓我們假設,你有一個主要領域,即mymaindomain.com和你有一些子域名可能subdomain1.mymaindomain.com, subdomain2.mymaindomain.com, subdomain3.mymaindomain.com, and more

現在,用戶登錄你的主要領域mymaindomain.com。而你的應用程序設置會話cookie來識別用戶。默認情況下,瀏覽器檢查主機向請求發送cookie。在你的情況下,如果用戶移動到子域subdomain1.mymaindomain.com,那麼瀏覽器只是嘗試創建新的會話。

要強制瀏覽器發送來自mymaindomain.com的cookie,必須設置cookie的「Domain」屬性。在這種情況下,顯式域屬性正好是mymaindomain.com。現在假設用戶移動到subdomain1.mymaindomain.com,然後瀏覽器自動發送由mymaindomain.com設置的會話cookie。

這是發生的,因爲這裏瀏覽器匹配突出顯示部分在以下子域subdomain1.mymaindomain.com

爲了讓您的應用程序獲得相同的會話cookie或用戶會話,並且其餘的工作應該照顧後端應用程序。同樣的域名限制也發生在您的後端。如果你想支持子域名瀏覽器請求,您的子域名的應用程序應該讀取數據庫這是常見的mymaindomain.com和其他子域像subdomain2.mymaindomain.com, subdomain3.mymaindomain.com, and more

注會話信息:這不會工作,如果您的域名是完全改變,我的意思是瀏覽器不會發送會話cookie,如果你的主機域被完全改變。