首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP setcookie()用于域,而不是子域

问PHP setcookie()用于域,而不是子域
EN

Stack Overflow用户
提问于 2009-09-13 15:14:54
回答 4查看 8.3K关注 0票数 11

是否有任何方法来设置子域上不可读的cookie?换句话说,可以在domain.com上使用cookie,但是不能使用 www.domain.com或xyz.domain.com。

代码语言:javascript
复制
//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文件等进行来回切换。

...do我必须回到使用www.domain.com作为我的网站?有什么解决办法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-13 15:21:23

显然,在"domain.com“上有一个与"*.domain.com”相匹配的cookie是预期的行为。

例如:持久客户端状态HTTP COOKIES状态(一些重点是地雷):

domain=DOMAIN_NAME 在搜索cookie列表以查找有效cookie时,将对cookie的域属性与将从中获取URL的主机的Internet域名进行比较。..。 “尾匹配”意味着域属性与主机的完全限定域名的尾相匹配。-- "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")
    • 例如,这就是对堆栈溢出所做的工作:静态内容是从sstatic.net提供的

​

票数 18
EN

Stack Overflow用户

发布于 2009-09-13 15:20:25

这就是为什么相当多的网站(包括这个网站)注册一个专用域作为CDN使用的原因。

票数 6
EN

Stack Overflow用户

发布于 2009-09-13 15:23:16

这是不可能的,因为cookie域是针对域名的尾匹配。你必须和www一起去。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1417963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档