2011-09-21 36 views
1

我不知道如何從PHP manual這句話應該解釋:PHP是否默認爲所有子域設置會話cookie?

session.cookie_domain指定會話 的cookie設置域。根本沒有任何意思是根據cookie規範生成cookie的服務器 的主機名。

這是否意味着對URL調用session_start時www.somedomain.com/somepage.php cookie將有以下形式:

Set-Cookie PHPSESSID=e48gh5mqggccgmn8172f0j5a06; path=/; domain=.somedomain.com 

或者

Set-Cookie PHPSESSID=e48gh5mqggccgmn8172f0j5a06; path=/; domain=www.somedomain.com 

我所看到的在索引頁上的第一個cookie標題和其他頁面上沒有域的標題。

有人可以對此有所瞭解嗎?

感謝

+0

[一些不錯的答案在這裏(HTTP:// stackoverflow.com/questions/644920/allow-php-sessions-to-carry-over-to-subdomains)。 – Alex

回答

3

沒有,PHP將usualy設置爲當前域前餅乾:wwww.domain.com。 要使所有內容保持一致,您必須將所有請求重定向到同一個域,或者明確設置所有子域的Cookie。

編輯:實際上,這是Firefox的真實情況。我認爲PHP不會真的設置域名,所以瀏覽器可以隨意使用他想要的任何內容。我認爲Internet Explorer會將其設置爲任何子域

+0

謝謝。 PHP實際上不會設置域名,所以它將發送的cookie是:'Set-Cookie PHPSESSID = e48gh5mqggccgmn8172f0j5a06; path = /'這是留給瀏覽器解釋的。需要進一步的調查來確定哪些瀏覽器做了什麼,但我想這並不重要。 –

0

它確實爲客戶端瀏覽器中顯示的域設置了cookie(所以,在您的問題中爲選項2)。如果您要爲所有子域設置Cookie,則應在參數中調用session_set_cookie_params()並將".domain.com"放入。

0

默認情況下,PHP沒有爲所有子域設置會話cookie。

如果你想建立一個對所有子域名的cookie,那麼你可以通過使用此代碼做到這一點:

<?php 
$currentCookieParams = session_get_cookie_params(); 

$rootDomain = '.example.com'; 

session_set_cookie_params(
    $currentCookieParams["lifetime"], 
    $currentCookieParams["path"], 
    $rootDomain, 
    $currentCookieParams["secure"], 
    $currentCookieParams["httponly"] 
); 

session_name('mysessionname'); 
session_start(); 

setcookie($cookieName, $cookieValue, time() + 3600, '/', $rootDomain); 
?> 

僅供參考,請訪問http://www.php.net/manual/en/function.session-set-cookie-params.php