带有子域的.NET 4.0 Cookie容器错误

时间:2014-02-18 15:42:13

标签: c# .net c#-4.0 httpwebrequest cookiecontainer

我正在开发一个项目,用于从Amazon.co.uk上的页面中删除内容。我可以成功提交登录表单,并将Cookie存储在CookieContainer中,一切正常,我已成功登录该站点。但是,当我浏览到某些页面时,它会显示已注销,再次提示登录屏幕。我永远无法以编程方式访问该页面。

我想我可能会陷入这里报告的与.NET 4上的子域名Cookie容器相关的错误:https://connect.microsoft.com/VisualStudio/feedback/details/771651/cookiecontainer-subdomain-handling-issue-in-net-4-0#

此链接存在两个解决方法:

  

解决方法#1:收到带有Version = 1 Cookie的响应后,将它们作为>纯Cookie添加到新的CookieContainer中,然后使用此新容器发出后续请求。

     

解决方法#2:在收到针对父域的Version = 1 Cookie的响应后,再次将它们添加到同一个> CookieContainer,现在再添加到子域。

我不确定我是否理解如何实现这一点,有没有人在此之前可以与我分享解决方案?我正在运行.NET 4.0。

谢谢, 科林。

1 个答案:

答案 0 :(得分:2)

我发现解决方法是在每个请求中重新创建CookieContainer并将版本1 Cookie修改为0:

CookieContainer newCookies = new CookieContainer();
newCookies.Add(new Uri("https://www.amazon.co.uk/"), new Cookie
            {
                Name = c.Name,
                Version = 0,
                Comment = c.Comment,
                CommentUri = c.CommentUri,
                Discard = c.Discard,
                Domain = c.Domain,
                Expired = c.Expired,
                Expires = c.Expires,
                HttpOnly = c.HttpOnly,
                Path = c.Path,
                Port = c.Port,
                Secure = c.Secure,
                Value = c.Value
            });

似乎是MS拒绝修复它的一个令人讨厌的错误。希望这可以帮助别人!