2011-05-04 78 views
3

我們修復了瀏覽器遇到的問題,無法通過添加以下代碼行來登錄子域。爲什麼我的會話隨機不會保存?

ini_set('session.cookie_domain', '.'.get_domain('http://'.$_SERVER['SERVER_NAME'])); 

get_domain函數獲取站點的域名,以便「sub.sub.domain.com」將返回「domain.com」。我們預先安排了一個「。」這樣我們的會話在所有子域名中都是很好的。

該固定不能夠的問題上登錄,但現在的問題是,自從我們加入這行代碼,我們將隨機無法登錄,因爲會話沒有創建,只是空值。

我說隨機,因爲我無法弄清楚是什麼原因造成的。有一天用戶可以登錄,他們會嘗試在第二天登錄,但它不起作用。清除cookie通常可以解決問題。任何想法我可能做錯了什麼?我嘗試過使用Google搜索,但沒有找到任何幫助,我們的用戶感到沮喪,而且我的想法已經枯竭。任何幫助真的很感激。

回答

0

原來我已經忘記在其中一個標題中改變這個設置,而這個標題是把所有東西都扔掉了。

(對不起,回答我的問題,多達投票大家的幫助)

1

清除cookie通常會解決問題。

看起來像是有一個緩存問題,但這只是一個假設。

從您的描述中,很難判斷問題出在瀏覽器端還是服務器端。

我可以給你的最好建議是在登錄表單上實現cookie測試。在用戶實際輸入他/她的憑據之前,您需要設置一個測試cookie並將其重定向到同一頁面,並附帶test獲取參數。如果使用此附加test參數請求該頁面,則會檢查該測試Cookie是否成功設置。

只有當測試通過時才允許登錄。否則,請提供錯誤信息並通知用戶有關技術問題。

這可能會幫助您確定問題實際發生的時間。此外,您甚至可以從服務器端添加更多信息,以防出現可能幫助您調試問題的錯誤。

+0

我使用的會話cookie,並通過set_cookie功能沒有手動設置cookie。你是說我應該看看在登錄之前是否可以創建一個cookie?我不太瞭解你的GET測試建議。 – Gazillion 2011-05-04 16:25:05

+0

該測試僅用於測試設置Cookie是否有效,並且只有在設置Cookie時才提供登錄表單才能起作用。要測試是否可以設置cookie,您需要設置cookie,使瀏覽器執行額外請求,並在該額外請求中檢查cookie是否已設置。測試cookie是另一個cookie,然後是會話cookie。你是否設置了更多其他餅乾? – hakre 2011-05-04 20:05:28

+0

謝謝,但事實證明,我忘記了在我的一個標頭中進行更改。我很尷尬。 – Gazillion 2011-05-09 13:39:59

1

只是爲了排除這種可能,請儘量以恆定的字符串get_domain()是這樣設置的域名,而不是獲得它:

ini_set('session.cookie_domain', '.foo.com'); 

在瀏覽器中一個很好看的Cookie,都對.foo.com任何設置舊的可能會設置(或正在設置)sub.foo.com

我看過一些類似於您所描述的問題,因爲某些cookie在不同的服務器上不可見。問題是sub.foo.com可能有一個cookie條目已經定義,你沒有刪除,只有它才能看到它。由於www.foo.com無法看到sub.foo.com cookie,所以在.foo.com上的www.foo.com上設置了新Cookie。

我希望這是有道理的...

+0

所以你認爲www.foo.com可能看不到sub.foo.com的cookies?我試圖在硬編碼價值之前弄清楚我正在尋找什麼,因爲我們目前有約45個網站運行這個登錄腳本,並且都使用不同的域名。對這個值進行硬編碼可以鎖定每個人(這意味着我可能不得不在下班時間內完成它)) – Gazillion 2011-05-04 16:22:26

+0

嗯,事實證明,我忘記了在我的標題(* facepalm *)之一中進行更改,這導致了問題依賴你來自哪裏。 – Gazillion 2011-05-09 13:39:26

相關問題