2011-09-21 80 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