使用WebRequest
和WebResponse
,我可以将登录信息发布到外部网站,并在Response.Cookies
和我的CookieContainer
中接收Cookie。我知道这是有效的,因为在相同的过程中,我可以请求不同的页面,而不是重定向到登录页面。这个cookie允许我在没有登录每个页面视图的情况下留在网站上。
我现在正尝试使用Response.Cookies.Add(httpCookie)
;
但是,它只会持续到程序结束。重新加载页面,cookie不再可用。
我做错了什么?
答案 0 :(得分:3)
您从外部网站WebResponse
收到的Cookie无法传递到您自己客户的浏览器中。这是因为cookie模型的固有安全限制:浏览器不支持为另一个域设置一个域集cookie。
这可能会在当前请求结束之前有效,因为您只是从刚刚添加Cookie的HttpCookieCollection
中读取。此集合将持续存在,直到当前HTTP请求结束。
但是,说实话,我不确定自System.Net.HttpWebResponse
和CookieContainer
使用System.Net.Cookie
以来Response.Cookies
和System.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}}