网络响应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;
}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...