3

当用户登录时,我正在尝试将会话 cookie 设置为仅限于特定路径(比如说/foo)。复杂之处在于登录页面已打开/,但请求会立即重定向到/foo/something. 像这样的东西:

要求:

POST / HTTP/1.1

username=foo&password=bar

回复:

HTTP/1.0 302 Found
Location: http://example.com/foo/home
Set-Cookie: session=whatever; path=/foo

但是,我可以找到的 RFC 的相关位(rfc2109rfc2965)是这样说的:

为防止可能的安全或隐私侵犯,如果以下任何一种情况属实,用户代理将拒绝 cookie(不应存储其信息):

  • Path 属性的值不是 request-URI 的前缀。

...

上面描述的 cookie 设置过程似乎可以正常工作,但据我所知,RFC 说不应该。

我想在生产系统中使用它,但如果我以后要面对可怕的浏览器不兼容问题,我真的不想这样做。

我是否误读了 RFC?

提前致谢!

4

2 回答 2

1

不要关注那些 RFC;他们非常偏离现实。

目前有一个 IETF WG 正在记录实际的 cookie 行为;他们的文件虽然只是草稿,但却是更好的源材料。

见: http ://datatracker.ietf.org/doc/draft-ietf-httpstate-cookie/

如果您在草稿中没有找到解决您问题的文本,请向工作组提出!

于 2010-04-30T06:59:27.090 回答
0

根据您的问题,我认为您对 RFC 的理解是正确的。听起来您想在重定向到'/foo/home'后设置 cookie 。我认为真正的问题是:“您如何告诉'/foo/home'用户已通过'/'正确验证?”

如果您必须使用 Location 标头(重定向)从'/''/foo/home',似乎唯一的方法是在 Location 标头的值中使用查询字符串参数。

也许要考虑的一个设计问题是:为什么用户要针对他们将安全访问的路径之外的 URL 进行身份验证?如果唯一安全的内容在'/foo'下,那么为什么不 POST 到'/foo/login'而不是'/'进行身份验证?

于 2010-01-27T14:13:36.263 回答