C# - HttpClient没有发送任何cookie

时间:2013-09-03 20:31:47

标签: c# asp.net .net cookies httpclient

我正在开发两个网站www.web1.com和www.web2.com。 在web1中,我保存了一个http cookie,如下所示

 HttpCookie AuthCookie = new HttpCookie(AppConstants.Cookie.AUTH_COOKIE);
 AuthCookie.Path = "/";
 AuthCookie.Value = "value1";
 Response.Cookies.Add(AuthCookie);

现在我想要的是在第二个网站即web2中读取这个cookie。我正在尝试使用HttpClient读取它,如下所示

 HttpClientHandler handler = new HttpClientHandler();
 handler.CookieContainer = new CookieContainer();

 HttpClient client = new HttpClient(handler);
 response = client.GetAsync("http://www.web1.com").Result;

 var cookies = cookies.GetCookies(new Uri("http://www.web1.com"));

这不会返回任何Cookie,也会通过Fiddler进行检查。但是,如果我直接打开www.web1.com并查看提琴手,那么它会发送cookie。

请查看我遗漏的内容,以便不从httpclient返回cookie。

谢谢,
SB

2 个答案:

答案 0 :(得分:0)

您无法获取或设置其他域的Cookie。这将是一个巨大的安全问题。 (你想让我在我的网站上阅读你网站的cookies吗?)

一些相关帖子:

  1. Create a asp.net authenicated cookie on 1 site for another
  2. I need to get all the cookies from the browser
  3. Create cookie with cross domain
  4. Cross domain cookies
  5. 更新:一点澄清:作为服务器,您无法在客户端上获取或设置其他域的Cookie,这是您想要做的。作为客户端,您可以修改/删除服务器为您设置的Cookie。

    1. 在您的示例中,您的服务器端代码正在向web1.com发出请求。您不会为随机客户端获取cookie。上面的代码中没有涉及客户端。

    2. 如果我访问web1.com并设置一个名为“username”的cookie,其值为“bob”,我可以作为客户端修改此cookie,使其值为“admin”,然后可能拥有您网站的管理员权限,具体取决于您处理Cookie的方式。

答案 1 :(得分:0)

不确定这是否适用于您的情况,但AuthCookie.Domain = "IP/Domain";应该为您完成工作。

已经说过其他可能感兴趣的其他选择,例如查询字符串和页面帖子。