HttpWebRequest/HttpWebResponse和cookies的问题

6
我在使用HttpWebRequest/HttpWebResponse和cookies/CookieContainer/CookieCollection时遇到了问题。问题是,如果Web服务器在cookie中没有发送或使用"path",则Cookie.Path将等于请求URI的路径部分,而不是在我的应用程序中等于"/"或为空。因此,在真正的Web浏览器中,这些cookie可用于整个域名,但在我的应用程序中却不行。有什么解决方法吗?
提前感谢您。
3个回答

4
啊,我明白你的意思了。通常浏览器实际上是将包含文档的文件夹作为路径;对于“/login.php”,它将是“/”,因此它将有效地在整个域中工作。“/potato/login.php”将仅限于“/potato/”;任何带有尾部路径信息部分的内容(例如“/login.php/”)都不起作用。
在这种情况下,可以认为Netscape规范是错误的,或者至少是误导性的,因为它声称路径默认为当前文档路径...取决于您如何读取那里的“路径”。但是,浏览器行为一致,回溯到最初的Netscape版本。Netscape从来没有很擅长撰写规范...
如果.NET的HttpWebRequest真的将CookieContainer.Path默认为当前文档的整个路径,那么我会针对它提交一个错误报告。
不幸的是,实际世界的行为实际上目前没有在标准文档中描述...有RFC 2965,它确实正确处理了路径问题,但进行了多个其他变更,这些变更并不代表实际浏览器行为,因此也不完全可靠。 :-(

1

看起来我无法继续使用默认的cookie处理程序,所以我感到很烦恼,只能用困难的方法解决。哈哈。因此,自己解析response.Headers["Set-Cookie"]是我的解决方案。虽然不是我首选的方法,但它有效。我还使用正则表达式消除了在错误逗号处拆分的问题。

如果我可以在这里发放积分,我会给你一些积分,bobince,因为你给了我有价值的信息。如果我可以投票(需要更高的声望得分),我也会投赞成票,但由于你提到的这种行为可能是一个bug,所以我将接受它作为答案。

谢谢。:)


感谢您发现这个错误并使其能够在谷歌上搜索到!:-) - bobince

0

这就是 cookie 的工作方式。 “合适的” 网络浏览器会完全按照古老的 Netscape cookie 文档指定的方式执行:http://cgi.netscape.com/newsref/std/cookie_spec.html

Web 应用程序必须有效地始终设置“路径”(通常为“/”)。


谢谢,bobince。 我明白了,但这对我来说有点奇怪,因为我所说的这个网站没有设置“路径”,但在Internet Explorer和Firefox中似乎仍然可以跨整个域名工作。 有什么想法吗? - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接