【发布时间】:2010-09-25 18:50:46
【问题描述】:
我正在开发一个有多个子域的网站,其中一些应该有自己的会话。
我想我已经解决了,但注意到关于 cookie 处理的一些我不明白的地方。我在文档中没有看到任何解释它的内容,所以我想看看这里是否有人对这个问题有一些了解。
如果我这样做:
session_start();
我最终得到一个像这样的会话 cookie:
subdomain.example.net
但是,如果我尝试自己设置 cookie 域,比如
ini_set('session.cookie_domain', 'subdomain.example.net');
或喜欢
session_set_cookie_params( 0, "/", "subdomain.example.net", false, false);
我最终得到一个 .subdomain.example.net 的 cookie(注意开头的点),我认为这意味着“匹配所有子域(或者在这种情况下为子子域)。
这似乎发生在我所有的 cookie 上,而不仅仅是会话。如果我自己设置 cookie 域,它会自动在前面加上点,这意味着该域及其所有子域。如果我不设置域,那么它只使用当前域就可以了。
知道是什么原因造成的,我能做些什么来控制那个前置点吗?
谢谢!
【问题讨论】:
-
您不必控制前导点,因为它只是被浏览器忽略,根据 RFC 6265,这是每个现代浏览器都实现的。所以不要考虑前导点。除此之外,显式设置 cookie 域或将其设置为空字符串以将其限制为当前请求主机。库github.com/delight-im/PHP-Cookie 有一些方便的控件。