2011-05-26 60 views
1

使用WebRequestWebResponse,我可以將登錄信息發佈到外部網站,並在Response.Cookies和我的CookieContainer中收到cookie。我知道這是行得通的,因爲在同樣的過程中,我可以請求一個不同的頁面,而不是重定向到登錄頁面。這個cookie允許我在不登錄每個頁面視圖的情況下留在網站上。webresponse cookies

我正在嘗試使用Response.Cookies.Add(httpCookie)將cookie添加到客戶端瀏覽器;

但是,它只會持續到程序結束。重新加載頁面,並且cookie不再可用。

我在做什麼錯?

+0

有一個看看這個答案,它可能會幫助http://stackoverflow.com/questions/4212713/grabbing-cookies-in-web-browser-control-wp7 – Art 2012-06-18 00:29:27

回答

3

您從外部網站收到的來自WebResponse的Cookie無法傳遞到您自己的客戶端瀏覽器。這是因爲Cookie模型固有的安全限制:瀏覽器不支持讓一個域爲其他域設置Cookie。

由於您剛從您剛剛添加Cookie的HttpCookieCollection中讀取數據,因此這可能似乎在當前請求結束時才起作用。這個集合將持續到當前的HTTP請求結束。

但是,說實話,我不知道你是如何能夠走到這一步,因爲在所有的的System.Net.HttpWebResponseCookieContainer使用System.Net.Cookie,而Response.Cookies集合使用System.Web.HttpCookie

無論如何,您最好的選擇可能是將您在WebResponse中獲得的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; 
} 
+0

感謝您的答案。你告訴我爲什麼我還沒有看到cookie。我想知道爲什麼cookie不是在Sharepoint中設置的,然後我閱讀了這篇文章,並且我在不同的區域中使用了新的。 – Anthony 2012-11-01 18:11:49