为什么werkzeug不允许将localhost用于cookie域?

时间:2014-06-24 12:52:13

标签: python cookies flask werkzeug

我正在使用Flask,当我尝试使用localhost作为Cookie域时,werkzeug说:

ValueError: Setting 'domain' for a cookie on a server running localy (ex: localhost) is not supportted by complying browsers. You should have something like: '127.0.0.1 localhost dev.localhost' on your hosts file and then point your server to run on 'dev.localhost' and also set 'domain' for 'dev.localhost'

每种开发人员都必须在hosts文件中设置域以使项目正常工作。我不明白为什么werkzeug会阻止这个!

问题是:

  • 为什么werkzeug这样做?
  • 如果可以将localhost用作Cookie域,会发生什么?
  • 我如何忽略此错误?

1 个答案:

答案 0 :(得分:2)

问题不在于Werkzeug阻止设置基于域的cookie - 而是问题是大多数浏览器不支持作用于localhost(或任何其他单一的)的域限制cookie字域)。而不是让你自己调试这个问题(为什么我的会话没有被尊重)Werkzeug会立即检测到你使用这个设置和错误。

我找到的最接近的原因是pseudo-spec

  

域= DOMAIN_NAME

     

在cookie列表中搜索有效的cookie时,将使用从中获取URL的主机的Internet域名对Cookie的域属性进行比较。如果存在尾部匹配,则cookie将通过路径匹配以查看是否应该发送。 "尾巴匹配"表示域属性与主机的完全限定域名的尾部匹配。 " acme.com"的域属性将匹配主机名" anvil.acme.com"以及" shipping.crate.acme.com"。

     

只有指定域内的主机可以为域设置cookie,域必须至少包含两(2)或三(3)个句点,以防止表单中的域:" .com& #34;," .edu"," va.us"。 [强调我的]任何在以下列出的七个特殊顶级域名之一内失败的域名需要两个时期。任何其他域名至少需要三个。七个特殊的顶级域名是:" COM"," EDU"," NET"," ORG"," GOV&# 34;," MIL"和" INT"。

如果允许使用单一域名,则黑客可以为.com设置Cookie,然后将该Cookie通过浏览器传输到最终用户访问的每个.com域。

另请参阅:http://daniel.haxx.se/blog/2011/04/28/the-cookie-rfc-6265/

相关问题