2016-11-15 32 views
0

我試圖從HttpWebResponse獲取ASP.NET_SessionId,但似乎沒有這樣的數據出現在響應中。 基本上我試圖模擬一些頁面上的一些步驟,需要進行身份驗證。問題不在於身份驗證,我的問題是在身份驗證後獲取ASP.NET_SessionId,以便在將來的請求/步驟中使用它。在HttpWebResponse上訪問ASP.NET_SessionId C#

從開發人員工具>網絡上的Chrome,我可以在標頭上看到ASP.NET_SessionId,但它不在我的HttpWebResponse中。任何意識爲什麼發生這種情況? 有我的代碼:

var httpWebRequest    = (HttpWebRequest) WebRequest.Create(url); 
httpWebRequest.UserAgent  = "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36";    httpWebRequest.Method   = "POST"; 
httpWebRequest.ContentType  = "application/x-www-form-urlencoded"; 
httpWebRequest.ContentLength = 0; 
var httpWebResponse    = (HttpWebResponse) httpWebRequest.GetResponse(); 

我的請求後,我看到一個ASP.NET_SessionId頭設置Cookie,但沒有運氣。任何理想?

我見過一些人說,

httpWebResponse.Headers["ASP.NET_SessionId"] 

httpWebResponse.Headers["SESSION_ID"] 

應該工作,但沒有,沒有會話ID頭設置也沒有任何的Cookie。

回答

0

經過多方考證,得到的答覆是here

基本上我們必須保持在所有請求相同的CookieContainer對象的引用。我從響應中提取了一些Set-Cookie並將它們添加到我的請求中,但現在我不需要做任何事情,CookieContainer可以透明地管理它。

來自響應的Set-Cookie在您的請求的CookieContainer上設置。這是他們發現解決可能的安全問題的方式,所以不要浪費更多時間,只需保留對CookieContainer的引用,因爲您無法訪問會話ID(並且不需要它)。

現在有我的代碼的例子。現在

var cookieContainer = new CookieContainer(); 

var httpWebRequest1 = (HttpWebRequest) WebRequest.Create(url); 
httpWebRequest1.CookieContainer = cookieContainer; 

// do the request and some logic 

var httpWebRequest2 = (HttpWebRequest) WebRequest.Create(anotherUrl); 
httpWebRequest2.CookieContainer = cookieContainer; // same cookieContainer reference 

一切是偉大的工作,希望它可以幫助別人。