webresponse cookies

时间:2011-05-26 18:21:17

标签: c# asp.net-mvc

使用WebRequestWebResponse,我可以将登录信息发布到外部网站,并在Response.Cookies和我的CookieContainer中接收Cookie。我知道这是有效的,因为在相同的过程中,我可以请求不同的页面,而不是重定向到登录页面。这个cookie允许我在没有登录每个页面视图的情况下留在网站上。

我现在正尝试使用Response.Cookies.Add(httpCookie);

将Cookie添加到客户端的浏览器中

但是,它只会持续到程序结束。重新加载页面,cookie不再可用。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

您从外部网站WebResponse收到的Cookie无法传递到您自己客户的浏览器中。这是因为cookie模型的固有安全限制:浏览器不支持为另一个域设置一个域集cookie。

这可能会在当前请求结束之前有效,因为您只是从刚刚添加Cookie的HttpCookieCollection中读取。此集合将持续存在,直到当前HTTP请求结束。

但是,说实话,我不确定自System.Net.HttpWebResponseCookieContainer使用System.Net.Cookie以来Response.CookiesSystem.Web.HttpCookie之后你怎么能够做到这一点。 1}}集合使用WebResponse

无论如何,这里你最好的选择可能是将你在Cookie中获得的cookie的值存储到你发送给浏览器的cookie中。然后,在将来的请求中,阅读您自己的Cookie,为外部网站构建新的CookieContainer,并手动将其添加到public ActionResult MyAction() { var container = new CookieContainer(); if (Request.Cookies["myCookie"] != null) { // browser has passed in "myCookie". // use this to create the "sessionKey" cookie to send. var cookie = new System.Net.Cookie("sessionKey", Request.Cookies["myCookie"].Value, "/", "external-site.com"); container.Add(cookie); } HttpWebRequest request; HttpWebResponse response; // initialize the request. // ... // make sure we're using our cookie container. request.CookieContainer = container; // execute the request and get the response. response = request.GetResponse(); // send a cookie, "myCookie", to the browser. // it will contain the value of the "sessionKey" cookie. Response.Cookies["myCookie"].Value = response.Cookies["sessionKey"].Value; }

这是一些假代码,假设外部网站正在寻找的cookie名为“sessionKey”,我们使用“myCookie”作为我们发送给客户端浏览器的cookie的名称:

{{1}}