PHP:Cookie域/子域控制

2022-08-30 13:54:13

我正在一个具有多个子域的站点上工作,其中一些子域应该有自己的会话。

我想我已经解决了这个问题,但注意到了一些我不明白的饼干处理问题。我在文档中没有看到任何解释它的东西,所以我想看看这里是否有人对这个问题有所了解。

如果我只是做:

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域,它会自动在前面加上点,这意味着这个域和它的所有子域。如果我没有设置域,那么它只使用当前域就可以正确。

任何想法是什么原因导致这种情况,以及我能做些什么来控制那个前置点?

谢谢!


答案 1

PHP 的 cookie 函数会自动在$domain前面加上一个点。如果您不希望出现此行为,则可以使用 header 函数。例如:

header("Set-Cookie: cookiename=cookievalue; expires=Tue, 06-Jan-2009 23:39:49 GMT; path=/; domain=subdomain.example.net");

答案 2

如果您在“http://subdomain.example.net”下运行PHP脚本,请不要使用域参数

setcookie('cookiename','cookievalue',time()+(3600*24),'/');

你会得到一个带有“subdomain.example.net”(而不是“.subdomain.example.net”)的饼干


推荐