2010-07-01 45 views
1

我被我的網站上的一些用戶告知了這個問題。一個用戶很多進入他們的瀏覽器http://xxxx.com,然後登錄。然後他們可以點擊一個鏈接,讓他們到http://www.xxxx.com它要求他們再次登錄!這是任何人遇到過的已知問題嗎?我嘗試了谷歌搜索,但即時通訊不知道如果即時通訊使用錯誤的關鍵字或什麼,因爲我找不到任何與此有關的東西。會話變量不會從http://www.xxxx.com繼承到http://xxxx.com

感謝, 伊恩·麥卡洛

回答

5

就您的瀏覽器而言,www.xxxx.com和xxxx.com是不同的域。同源策略阻止跨域訪問Cookie。

但是,瀏覽器知道子域名,而子域名可以訪問父域的Cookie。所以,如果你想讓你的cookie可以訪問xxxx.com和www.xxxx.com,只需在.xxxx.com上設置你的cookie,你就會被設置。

+0

+1。但更好的是:選擇一個域並堅持下去。將example.com的所有流量重定向到www.example.com,或將所有流量從www.example.com重定向到example.com。不要同時使用兩者。 – 2010-07-01 01:30:26

0

檢查cookie的域,創建cookie時,你可以指定它是所有子域名,根服務器,特定子域等。爲了處理所有的cookie將用於.example.com

0

當您設置cookie時,您可以選擇指定cookie設置爲哪個域。如果您不這樣做,則該Cookie僅適用於該主機名,因此如果該cookie在www.example.com上設置,則該cookie將僅由該主機名或以下的瀏覽器返回。

如果在設置cookie時將域設置爲「example.com」,它也應該在「www.example.com」上工作。

問題是更具體的cookie會覆蓋不太具體的cookie,所以如果您以前在「www.example.com」上設置了cookie,它將繼續覆蓋爲「example.com」設置的新cookie 「,而不是被它取代 - 你首先必須刪除爲」www.example.com「設置的一個。從客戶端返回一個cookie到服務器,它不會說cookie設置爲哪個主機名,會變得非常棘手。

0

人們似乎認爲您使用cookie來執行身份驗證,但正在跳過似乎是您的根本問題。 Trevor簡要地談到了它,但仍然堅持cookie的概念。就http而言,www.xxxx.com和xxxx.com是同一頂級域名上的不同子域名。因此,儘管它們可能是相同的IP,相同的網站,相同的一切,但瀏覽器請求和服務器的響應被認爲是2個獨立的域/站點。會話不會跨子域共享,除非您有單獨的會話狀態(例如SQL會話存儲等)。但是,如果您使用Cookie進行身份驗證,則可以添加對cookie的檢查,並在cookie中的數據有效(並且足以重建會話)時重新建立新會話。否則,您將不得不將會話狀態從進程中分離到數據存儲中。