2010-08-18 143 views
1

我嘗試從語法上檢索ASPXAUTH cookie,但沒有成功。 A similar question發佈到此論壇沒有證明有幫助。以編程方式獲取.ASPXAUTH cookie值II

我的代碼如下所示。一個已知的疑難問題是確保將cookieContainer分配給請求,我已經完成了。另外,我可以在調試器中運行Web應用程序,並看到請求是有效的 - 用戶確實通過了身份驗證,並調用了FormsAuthentication.SetAuthCookie()

我的代碼如下所示。在最後一行中,response.Cookies始終爲空(爲簡潔起見,刪除了usingclose()語句)。

迴應stevemegson:

  • 沒有,response.Headers集合不包含 「設置Cookie」 頭
  • 驚人!如果我查詢的CookieContainer中,cookie是確實存在:

    CookieCollection cookies = cookieContainer.GetCookies(new Uri(BaseUri)); 
    Cookie cookie = null; 
    foreach (Cookie c in cookies) 
    { 
        if (c.Name == ".ASPXAUTH") 
        { 
         cookie = c; 
         break; 
        } 
    } 
    return cookie; 
    

原始代碼:

string uri = string.Format("{0}/Account.aspx/LogOn", BaseUri); 
CookieContainer cookieContainer = new CookieContainer(); 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
request.CookieContainer = cookieContainer; 
request.Method = "POST"; 
string postData = string.Format("UserName={0}&Password={1}&RememberMe=true", UserName, Password); 
byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = byteArray.Length; 
Stream dataStream = request.GetRequestStream(); 
dataStream.Write(byteArray, 0, byteArray.Length); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
Cookie cookie = response.Cookies[".ASPXAUTH"]; // Collection is always empty; returns null!! 

回答

2

看起來沒有什麼明顯的錯誤,但接下來的事情我會檢查是:

如果您閱讀的內容,是否可以看到Set-Cookie標頭?如果可以避免的話,你並不是真的想將cookie的值解析出來,但是這將確認頭文件至少可以恢復正常。

如果直接用cookieContainer.GetCookies(request.RequestUri)查詢CookieContainer,你能看到cookie嗎?

+0

請參閱上面的修改。我確實可以通過調用cookieContainer.GetCookies()來檢索cookie。這並不回答爲什麼response.Cookies是空的,但它解決了我眼前的問題。非常感謝。 – Brett 2010-08-18 18:17:32