2009-06-19 34 views
8

我的办公室里有一个位于防火墙后面的开发服务器。主机名是franklin。我们将所有的服务器命名为科学家或发明家。内联网域名Cookie

当我设置一个HTTP cookie:

Set-Cookie: user=kenny; expires=1245424860.11; Path=/; domain=franklin 

cookie不设置。我尝试了以下,但没有运气。

.franklin 
.franklin.local 
franklin.local 
.franklin.localdomain 
franklin.localdomain 

我必须将主机名设置为不同的东西,或者我可以通过一些我不知道的魔法来设置这个cookie吗?

+0

奇怪的是,我放弃了域=富兰克林,它设置了cookie。使用firefox的Web开发工具栏,它说域名是富兰克林。不知道发生了什么事。 – 2009-06-19 20:27:54

回答

7

RFC 2109说:

为了避免可能的安全或隐私的侵犯,用户代理 拒绝一个cookie(不存储它的信息),如果任何 以下的为真:

  • “域”属性的值不包含嵌入点或 不以点开头。
  • 请求主机的值与域 属性没有域匹配。

而且也:

域默认为请求主机。

如果你的主机是franklin

  • 饼干domain=.franklin将被拒绝,因为它没有嵌入点。
  • domain=.franklin.local的Cookie将被拒绝,因为它与您的服务器的实际主机名称不匹配。

的解决方案是主机名重命名为franklin.localfranklin.<tld>并相应地设置该cookie的domain属性(domain=.franklin.<tld>)。或者(如您发现的那样),不要指定domain,并让用户代理回退到请求主机。

+1

很好的解释!感谢molf! – 2009-06-19 21:14:31

0

你是否从正确的域设置cookie?您应该通过http://franklin/访问该网站,否则它将无法工作(请参阅:同源策略)。

+0

我可以访问它作为http:// franklin/ – 2009-06-19 20:27:23