C#中Request.Cookies 和 Response.Cookies 的差別剖析。本站提示廣大學習愛好者:(C#中Request.Cookies 和 Response.Cookies 的差別剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中Request.Cookies 和 Response.Cookies 的差別剖析正文
.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());
}
總結:
Request.Cookies:重要是用於獲得一切Cookie值的,包含JS、Request.Cookies和Response??.Cookies三種辦法創立的Cookie值;說到這裡,年夜家可以看出Request.Cookies既可以獲得Cookie也能夠創立Cookie,那末它創立的Cookie與Response和JS創立的Cookie有甚麼不消呢,經由過程試驗發明,經由過程Request.Cookies創立的Cookie只要?Request.Cookies能力獲得到,而其他兩種辦法是不克不及獲得的,也就是說Request.Cookies創立的Cookie只能用於.Net後台不克不及用於HTML的前台。
Response.Cookies:重要用於Cookie的創立、賦值和刪除操作,經由?Response.Cookies操作過的Cookie,一切辦法獲得到的都是被更新過的值,也就是說Response.Cookies是修正一切容器中的Cookie的值;Response.Cookies除是Cookie的最終修正者外,我們在寫代碼的時刻能夠會發明經由過程Response.Cookies也能夠獲得部門Cookie的值,經由過程試驗發明,此處獲得的Cookie值只是本次會話中且是經由過程Response.Cookies創立的Cookie,根本上沒甚麼用途。