国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中Request.Cookies 和 Response.Cookies 的區別分析

2019-10-29 21:46:23
字體:
來源:轉載
供稿:網友
本文通過實例代碼向我們展示了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,基本上沒什么用處。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 横山县| 伊吾县| 昌江| 皋兰县| 天台县| 仙游县| 堆龙德庆县| 麻栗坡县| 芦山县| 垫江县| 鹰潭市| 呼伦贝尔市| 博野县| 贺兰县| 巩留县| 巴彦淖尔市| 嘉峪关市| 陇川县| 新疆| 洪洞县| 凌海市| 巴中市| 新邵县| 东源县| 烟台市| 贡嘎县| 滕州市| 广东省| 宜章县| 四子王旗| 沁源县| 灌阳县| 改则县| 萨嘎县| 苏尼特右旗| 龙川县| 宣武区| 安平县| 富顺县| 信宜市| 通州市|