.NET中提供了讀寫Cookie的多種方法,Request.Cookies 是客戶端通過 Cookie 標頭形式由客戶端傳輸到服務器的 Cookie;Response.Cookies 在服務器上創建并以 Set-Cookie 標頭的形式傳輸到客戶端。也就是說,一個是客戶端向服務器端發送的來的,一個是服務器發送到客戶端的。
第一次創建Cookies的時候,下面的2種讀取方法讀取到的內容是一樣:
C# 代碼HttpCookie hc = new HttpCookie("User2");hc["UserName"] = "mengxianhui";Response.Cookies.Add(hc);Response.Cookies["User1"]["UserId"] = "net_lover";Response.Write(Request.Cookies["User1"].Values["UserId"].ToString());Response.Write(Request.Cookies["User2"].Values["UserName"].ToString());Response.Write("<hr>");Response.Write(Response.Cookies["User1"].Values["UserId"].ToString());Response.Write(Response.Cookies["User2"].Values["UserName"].ToString());但是,一旦Cookie存在,再使用上面的方法進行讀取,結果是有差別的,Response.Cookies可以立即讀取到新的Cookie,而Request.Cookies讀取到仍是上一次設置的,也就是必須通過客戶端向服務器發送請求時才能讀取到。為什么會有這樣的差別,應該是.NET實現的問題,里面有這么一段:C# 代碼if (includeResponse && (this.Response != null)){ HttpCookieCollection cookies = this.Response.Cookies; if (cookies.Count > 0) { HttpCookie[] dest = new HttpCookie[cookies.Count]; cookies.CopyTo(dest, 0); for (int i = 0; i < dest.Length; i++) { cookieCollection.AddCookie(dest[i], true); } }}在Cookie不存在時,它應該是讀取Response.Cookies里面的Cookie了,所以第一次讀取相同,而以后讀取不同的原因吧。
另外,Response.Cookies必須是在設置完后讀取,不能像Request.Cookies那樣隨時讀取,如在別的頁面讀取Cookies,下面的方法就是錯誤的
C# 代碼PRotected void Page_Load(object sender, EventArgs e){ Response.Write(Response.Cookies["User1"].Values["UserId"].ToString()); Response.Write(Response.Cookies["User2"].Values["UserName"].ToString());}
新聞熱點
疑難解答