我正在尝试在用户登录时将会话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的相关位(rfc2109和rfc2965)说明了这一点:
为了防止可能的安全或隐私侵犯,用户代理 拒绝cookie(不得存储其信息),如果有的话 以下是真的:
- Path属性的值不是请求的前缀 - URI。
...
上面描述的cookie设置过程似乎工作没问题,但据我所知,RFC说不应该这样做。
我想在生产系统中使用它,但如果我以后要面对可怕的浏览器不兼容问题,我真的不想这样做。
我误读了RFC吗?
提前致谢!
答案 0 :(得分:1)
不要关注那些RFC;他们与现实背道而驰。
目前有一个IETF工作组正在记录实际的cookie行为;他们的文件,虽然只是一个草稿,是更好的源材料。
请参阅: http://datatracker.ietf.org/doc/draft-ietf-httpstate-cookie/
如果您未在草稿中找到解决问题的文字,请与工作组联系!
答案 1 :(得分:0)
根据您的问题,我认为您对RFC的理解是正确的。听起来你想在重定向到 '/ foo / home' 之后设置cookie。我认为真正的问题是:“你怎么告诉 '/ foo / home' 用户通过 '/'正确认证了用户 强>?“
如果您必须使用位置标头(重定向)从 '/' 转到 '/ foo / home' ,似乎唯一的方法是在Location标头的值中使用查询字符串参数。
可能需要考虑的一个设计问题是:为什么用户会对他们将安全访问的路径之外的URL进行身份验证?如果唯一的安全内容位于 '/ foo' 下,那么为什么不POST到 '/ foo / login' 而不是 '/' 进行身份验证?