如何解决网络响应cookie
| 使用WebRequest
和WebResponse
,我可以将登录信息发布到外部站点,并在Response.Cookies
和CookieContainer
中接收cookie。我知道这是可行的,因为在相同的过程中,我可以请求其他页面,而不会重定向到登录页面。该cookie使我无需登录每个页面视图就可以保留在该网站上。
我现在正尝试使用Response.Cookies.Add(httpCookie)
将cookie添加到客户端的浏览器中;
但是,它只会持续到过程结束。重新加载页面,cookie不再可用。
我究竟做错了什么?
解决方法
您从外部站点从“ 1”获得的cookie无法传递到您自己的客户端的浏览器中。这是由于cookie模型固有的安全性限制:浏览器不支持让一个域为另一个域设置cookie。
这似乎一直有效,直到当前请求结束为止,因为您只是从刚向其中添加了cookie的ѭ6中读取内容。该收集将一直持续到当前HTTP请求结束为止。
但是,老实说,我不确定您如何才能做到这一点,因为
System.Net.HttpWebResponse
和CookieContainer
使用System.Net.Cookie
,而Response.Cookies
系列使用System.Web.HttpCookie
。
无论如何,您最好的选择可能是将您在“ 1”中获得的Cookie的值存储到发送给浏览器的Cookie中。然后,根据将来的请求,读取您自己的cookie,为外部站点构建一个新的Cookie
,并将其手动添加到CookieContainer
中。
这是一些伪代码,假设外部站点正在查找的cookie名为\“ sessionKey \”,并且我们使用\“ myCookie \”作为发送给客户端浏览器的cookie的名称:
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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。