我想知道如何解释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标头,在其他页面上看到了没有域名的标题。
有人可以对此有所了解吗?
由于
答案 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