PHP setcookie()用于域但不是子域

bri*_*vis 10 php cookies subdomain

有没有办法设置一个在子域上无法读取的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');
Run Code Online (Sandbox Code Playgroud)

原因是:我在子域上设置静态CDN,并且不希望用户会话cookie为每个图像,css文件,js文件等来回传递.

...我是否必须回到使用www.domain.com我的网站?有没有解决方法?

Pas*_*TIN 17

显然,在"domain.com"上使用与"*.domain.com"匹配的cookie是预期的行为.

例如:PERSISTENT CLIENT STATE HTTP COOKIES状态(一些强调我的):

domain=DOMAIN_NAME

在cookie列表中搜索有效的cookie时,将使用从中获取URL的主机的Internet域名来比较cookie的域属性....
"尾部匹配"表示域属性与主机的完全限定域名的尾部匹配."acme.com"的域属性将匹配主机名"anvil.acme.com"以及"shipping.crate.acme.com".

只有指定域中的主机可以为域设置cookie,并且域中必须至少有两(2)或三(3)个句点,以防止表单域:".com",".hadu"和" va.us".在下面列出的七个特殊顶级域之一中失败的任何域只需要两个句点.任何其他域名至少需要三个.七个特殊的顶级域名是:"COM","EDU","NET","ORG","GOV","MIL"和"INT".

所以,你要么必须:

  • 使用" www.domain.com"为您的网站
  • 或者为静态内容使用完全不同的域名(例如" .anotherdomain.com")
    • 例如,这是在stackoverflow上完成的:静态内容从sstatic.net提供


Row*_*haw 6

这就是为什么很多站点(包括这个站点)注册一个专用域用作CDN的原因.