PHP是否默认设置所有子域的会话cookie?

时间:2011-09-21 09:53:31

标签: php session

我想知道如何解释PHP manual的引用:

  

session.cookie_domain指定要在会话中设置的域   曲奇饼。默认值为none表示服务器的主机名   根据cookie规范生成cookie。

这是否意味着在网址www.somedomain.com/somepage.php上调用session_start时,Cookie将具有以下格式:

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

或者

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

我在索引页面上看到了第一个cookie标头,在其他页面上看到了没有域名的标题。

有人可以对此有所了解吗?

由于

3 个答案:

答案 0 :(得分:3)

不,php通常会设置当前域名的域名:wwww.domain.com。 要使所有内容保持一致,您必须将所有请求重定向到同一个域,或者为所有子域明确设置cookie。

编辑:实际上,这适用于Firefox。我认为PHP不会实际设置域名,因此浏览器可以随意使用他想要的任何内容。我认为Internet Explorer会为任何子域设置它

答案 1 :(得分:0)

它确实为客户端浏览器中显示的域设置了cookie(因此,问题中的选项2)。如果您要为所有子域设置Cookie,请致电session_set_cookie_params()并将".domain.com"放入$domain参数。

答案 2 :(得分: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