PHP:Cookie域/子域控件

2021/01/31 01:21 · php ·  · 0评论

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

我想我已经解决了,但是注意到了一些我不理解的关于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域,它将自动在前面加上点号,表示该域及其所有子域。如果我未设置域,则仅使用当前域即可正确处理。

知道是什么原因造成的,我该怎么做才能控制该前置点?

谢谢!

PHP的cookie函数自动在$ domain前面加一个点。如果您不希望出现这种情况,可以使用标头函数。例如:

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

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

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

您将获得一个带有“ subdomain.example.net”(而不是“ .subdomain.example.net”)的Cookie。

如果阅读了所有RFC 6265,您将认识到拥有“仅主机” cookie的唯一正确方法是不设置域属性。

http://tools.ietf.org/html/rfc6265#section-5.4

我意识到这是一个老问题,但是我遇到了这个问题,上面的答案都没有做到。

我想为子域设置会话cookie,但也要启用httponly和安全。

避免领先。在子域的前面,Kevin和stolsvik是正确的,请不要设置domain属性。

因此,要做到这一点并且仍然能够设置httponly和安全模式,请将域设置为NULL,如下所示:

session_set_cookie_params(0, '/', NULL, TRUE, TRUE);

现在,您将拥有一个针对特定子域(不带前导。)的会话Cookie,其httponly和secure设置为true。

这可能会对某人有所帮助(我花了几个小时来解决这个问题)。在源文件中进行更改之后,在进行测试之前,请关闭浏览器以正确销毁所有域和子域中的PHPSESSIONID。

希望这可以节省一些时间!

我在用wordpress设置cookie时遇到了问题,这对我有所帮助,域名价值是使其在所有页面上都能正常工作的关键

$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;

setcookie("cookie_name", 'cookie_value', 0, '/', $domain);
本文地址:http://php.askforanswer.com/phpcookieyu-ziyukongjian.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!