2013-03-25 75 views
0

我想要設置會話cookie時出現一些非常奇怪的錯誤。session_set_cookie_params()指向錯誤的域

如果我使用以下規則:「」

session_set_cookie_params(0, '/', $_SERVER['HTTP_HOST'], false, true); 
//$_SERVER['HTTP_HOST'] resolves into "jscripting.nl" 

它總是把一個在網址前面,它總是會讓我的session_id在我的所有子域中都可以訪問,這是我在我的子域中開發的一個問題,session_id可能會互相干擾。

有什麼我做錯了或是我的服務器設置有問題嗎?

+0

取決於。你的$ _SERVER ['HTTP_HOST']是什麼? – eis 2013-03-25 20:31:09

+0

顯然只是沒有設置域已經解決了我的問題,但我真的不想訴諸於此,因爲我現在無法使會話cookie生效。如果有人有更好的解決方案,我會留下這個問題。 – 2013-03-25 21:58:10

回答

2

$_SERVER['HTTP_HOST']與服務器設置無關,它來自客戶端請求的主機頭。

如果要使用在服務器端配置的服務器名稱,其實現方式通常是使用$_SERVER['SERVER_NAME'],但在some cases中也受到主機頭的影響。

編輯:顯然,域的任何值都會默認添加一個點,所以它將包含任何子域,唯一有效的方法是僅將它應用於當前域,而不設置參數或使用原始頁眉設置cookie。有關此主題的更多信息,請參閱this thread

您可以通過在域名參數上設置null來使cookie更安全並且仍然適用於您的情況。

+0

我知道這個函數不應該爲網址附加點,這就是我稱之爲奇怪錯誤的原因。即使當我只是輸入一個字符串,它會附加一個點... – 2013-03-25 21:18:22

+0

@ J.Peters其實我錯了,這就是函數編碼做的。請參閱我添加的鏈接中的討論 - 基本上,將域名具體化的方法是省略參數或使用原始標頭調用來設置cookie。 – eis 2013-03-25 22:26:38

+0

如果我用一句話總結你的答案,我會說:使用'session_set_cookie_params(0,'/',null,false,true);'(用第三個參數中的空值替換手動設置的主機名原始示例) – 2013-03-25 22:31:29