2008-11-15 77 views
6

我遇到了HttpWebRequest/HttpWebResponse和cookies/CookieContainer/CookieCollection的问题。 问题是,如果Web服务器不在Cookie中发送/使用“路径”,则Cookie.Path等于请求URI的路径部分而不是“/”或在我的应用程序中为空。 因此,这些cookie不适用于整个域,它实际上在正确的Web浏览器中执行。 任何想法如何解决这个问题?HttpWebRequest/HttpWebResponse和cookies的问题

在此先感谢

回答

4

啊,我明白你的意思了。一般浏览器究竟是做的是以包含文档的文件夹为路径;因为'/login.php'是'/',所以它可以在整个域中有效地工作。 '/potato/login.php'将被限制为'/ potato /';跟踪路径信息部分的任何内容(例如'/login.php/')都不起作用。

在这种情况下,Netscape规范可能被认为是错误的或者至少在声称路径默认为当前文档路径时产生误导......取决于您在那里读取“路径”的方式。然而,浏览器行为与原始Netscape版本一致。 Netscape从来没有擅长编写规格......

如果.NET的HttpWebRequest实际上是默认CookieContainer.Path到当前文档的整个路径,我会提交一个反对它的错误。

不幸的是,现实世界中的行为实际上目前并没有在标准文档中描述过......有RFC 2965,它确实能够找到正确的路径,但会做出其他一些不能代表真实世界浏览器行为的变化,所以那也不完全可靠。 :-(

0

这就是饼干的工作方式。 “适当的”网络浏览器做同样的,因为在古代网景的cookies文档最初指定:http://cgi.netscape.com/newsref/std/cookie_spec.html

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

+0

谢谢你,bobince。 我明白了,但这对我来说有点奇怪,因为我在谈论哪个网站没有设置“路径”,至少在Internet Explorer和Firefox中似乎仍然可以在整个域中工作。 任何想法? – James 2008-11-15 18:05:07

1

似乎我不能再进一步使用默认的cookie处理程序,所以我很恼火,而且我做到了这一点。哈哈。所以解析response.Headers [“Set-Cookie”]我自己就是我的解决方案。不是我的首选,但它的工作原理。我简单地消除了用正则表达式分割错误的问题。

如果我可以在这里给出点,我会给你一些,bobince,因为你给如果可以的话,我也会投票赞成(需要更高的代表分数),但是由于这种行为可能是一个错误,正如你所提到的,我会接受这个答案。

谢谢。

+0

感谢您发现错误并使其易用! :-) – bobince 2008-11-17 13:45:45