PHP的setcookie()域但不是子域(PHP setcookie() for domain b

2019-07-17 21:51发布

有没有什么办法来设置cookie是不是子域可读? 换句话说,对现有的饼干domain.com ,但 www.domain.comxyz.domain.com

//this is what i'm "intending"...
setcookie($name,$value,$expires,'/','domain.com');
//however, this is how it behaves:
setcookie($name,$value,$expires,'/','.domain.com');

其理由:我在一个子域建立一个静态CDN,不希望用户会话cookie来回回的每个图像,CSS文件,JS文件,等等。

......我必须退回到使用www.domain.com我的网站? 是否有任何变通办法?

Answer 1:

显然,其上的“domain.com”,将匹配“* .domain.com”一个cookie是预期的行为。

例如: 持久性客户端状态HTTP COOKIES状态(一些重点煤矿):

domain=DOMAIN_NAME

当搜索有效饼干Cookie列表,cookie的域属性的比较与来自该网址将获取的主机的Internet域名所作出的。 ...
“尾巴匹配”是指结构域属性与主机的完全合格的域名的尾部匹配。 “acme.com”的域属性将匹配主机名“anvil.acme.com”以及“shipping.crate.acme.com”。

仅在指定的域内的主机可以设置cookie为域和域必须具有至少两个(2)或三(3)在其中周期以防止形式的结构域:“.COM”,“埃杜”和“ va.us”。 下面列出的七个特殊的顶级域名之一中失败的任何域只需要两个时期。 任何其他的域需要至少三个。 七个特殊的顶级域名分别是: “COM”, “EDU”, “NET”, “ORG”, “GOV”, “MIL” 和 “INT”。

所以,你要么必须:

  • 使用“ www.domain.com ”为您的网站
  • 或者使用完全不同的域名为您的静态内容(如“ .anotherdomain.com ”)
    • 举例来说,这是什么在计算器完成:静态内容从sstatic.net服务


Answer 2:

这就是为什么不少网站(包括本)注册用作CDN一个专用域名的原因。



Answer 3:

作为Cookie域这是不可能的尾部匹配对域名。 你将不得不以www。



文章来源: PHP setcookie() for domain but NOT subdomains