2010-07-08 130 views
0

我的應用程序有一個用戶空間,曾經被URL訪問像domain.com/~username,但我正在將其轉換爲使用子域的過程,而不是(username.domain.com )。但是,我遇到了一個問題,我希望有人可能會有一個如何解決問題的想法。從主域複製餅乾到子域

當前,用戶網站的訪問者獲取的表格的格式爲user<id>_authentication(其中<id>是他們正在訪問的網站的用戶ID)的Cookie,該網站設置爲擁有域www.domain.com。但是,現在我要切換到子域,我希望找到這些cookie並將它們轉移到每個子域名爲authentication的新Cookie,並使用該子域作爲cookie域。但是,導軌cookies陣列沒有找到主域cookie。

我知道如果舊餅乾使用.domain.com作爲域名,而他們會應用到子域名,並且會出現在cookies中,但這些cookie已經存在,並且我試圖將更改作爲爲用戶儘可能無縫 - 所以如果他們已經爲一個站點準備了身份驗證cookie,我希望他們不必在可能的情況下重新進行身份驗證。

有沒有什麼辦法可以從主域名中獲取cookie,或者有沒有人有另一個關於如何轉移cookie的建議?

更新:對不起,我之前沒有說清楚,只有當訪問者通過在用戶的網站上提交表單主動進行身份驗證時才設置cookie。

回答

1

如果您更改cookie域以使其更加寬容(應用於更多子域),則無法讀取舊的,更受限制的cookie,只能從以前的頂級域中讀取。

您必須先閱讀cookie,進行身份驗證,然後再寫一個新的更寬容的cookie,才能讓子域讀取cookie。

您可以在該功能之前推出您的遷移邏輯,並希望您獲得大多數人。其餘的將不得不手動重新認證。

+0

是的,我想有一種方法可以在遷移之前更新cookies,使其成爲子域非特定的,但正如你所說,這仍然不會吸引每個人,因爲它依賴用戶不僅要去主站點,但在功能部署完成之前的某個截止日期之前訪問每個經過身份驗證的用戶的網站。 – 2010-07-08 17:54:16

1

我個人認爲他們應該重新驗證..它只會發生一次,然後他們將有新的「.domain.com」cookie。

但是...實現這一目的的一種方法是檢查新的cookie,當找不到它時,重定向到主域上的新頁面,提供返回URL。

在該新頁面中,檢查舊樣式Cookie,設置新樣式Cookie並重定向到原始網址。如果他們沒有舊式Cookie,則重定向到登錄區域。

希望這有助於。

+0

對不起,我想我有點不清楚;只有訪問者在用戶的網站上主動驗證身份(通過填寫表單)才能設置cookie。重定向是我沒有考慮過的一個好主意,但如果沒有主域cookie存在,那麼這不會導致額外的不必要的重定向? – 2010-07-08 15:49:29

+0

是的,但是舊的cookie只對MAIN域可用,所以沒有其他的檢查方式。這就是爲什麼我建議不要這樣做...讓他們重新認證。 – Fosco 2010-07-08 15:52:54