有没有办法在子域名上设置不可读的cookie?换句话说,请在domain.com
上提供Cookie,但不 www.domain.com
或xyz.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
作为我的网站?有没有解决方法?
答案 0 :(得分:17)
显然,在“domain.com”上设置一个与“* .domain.com”匹配的cookie是预期的行为。
例如:PERSISTENT CLIENT STATE HTTP COOKIES州(某些强调我的):
<强>
domain=DOMAIN_NAME
强>搜索Cookie列表时 有效的饼干,比较 cookie的域属性是 用互联网域名制作的 URL所在的主机 牵强。 ......“尾巴匹配”是指 该域属性是匹配的 完全靠尾巴 主机的合格域名。 :一种 “acme.com”的域属性会 将主机名“anvil.acme.com”匹配为 以及“shipping.crate.acme.com”。
仅指定域内的主机 可以为域设置cookie 域必须至少两个(2) 或三(3)个期间 防止表单域:“。com”, “.edu”和“va.us”。任何领域 在七个特别之一内失败 顶级域名仅在下面列出 需要两个时期。任何其他域名 需要至少三个。七 特殊的顶级域名是:“COM”, “EDU”,“NET”,“ORG”,“GOV”,“MIL”和 “INT”。
所以,你要么:
www.domain.com
”.anotherdomain.com
”)
答案 1 :(得分:6)
这就是为什么很多站点(包括这个站点)注册一个专用域用作CDN的原因。
答案 2 :(得分:1)
由于Cookie域名是tail matched,因此无法对域名进行操作。你必须使用www。
答案 3 :(得分:0)
当然可以!那就是大多数网站所做的。甚至内置的php函数session_start()
都可以做到这一点。其Set-Cookie http响应标头看起来就像这样简单:
Set-Cookie: PHPSESSID=fe26eaac143ef75ffcbc91bbe5780d0d; path=/
根据RFC 6265, section 4.1.2.3,该段中的最后一个语句:
如果服务器省略“域”属性,则用户 代理会将Cookie仅 返回到原始服务器。
因此,您要做的就是在设置domain.com
中的cookie时忽略domain属性。
setcookie($name,$value,$expires,'/','');
为进一步确认,我自己进行了测试,并向您保证,当您在省略域属性的同时设置'em时,无法从子域访问cookie。