Cookie的使用(C#)

  • 903
  • 0
  • C#
  • 2021-01-08

相信大家對Cookie這個詞並不陌生,甚至沒有程式背景的人也都知道這個詞

在刪除瀏覽器紀錄時,會出現是否要刪除Cookie的選項

要是刪除的話,之後在進入FB或Youtube之類需要登入的頁面時,就會發現帳密需要重登了

那究竟Cookie是什麼東西呢?

在提到Cookie之前,首先我們先來介紹一下作用域(Scope)這個詞

基本上,一個變數的作用域,指的是該變數能使用的範圍

通常聽到的就是區域變數以及全域變數

這裡的區域與全域指的就是變數的使用範圍

同樣的概念,在Web中一樣也會有作用域的存在

而且通常該作用域都會有相同名稱的物件存在

所以我們要來介紹常見的作用域

 

第一個最基礎的作用域為Request

當你想要進入一個網頁時,瀏覽器會對伺服器發送一個頁面請求(Requset)

而這個請求可以想成是一封信

信的封面會有一些信的資訊(Header)

信的裡面會包含此信件的內容(Body,裡面包含Data或夾帶的File)

伺服器取得這個頁面請求後,對裡面的data進行處理後,會回傳一個回應(Response)

瀏覽器取得回應後,將頁面內容顯示在頁面上

而因為已經取得我們要的資料了,所以之前的Request也就不需要了

所以,一個Request的生命週期為一次的請求與回應

 

但假設我們正在瀏覽的網頁是VIP才能瀏覽的

難道每一次發送一個請求時,都要做一次身分認證嗎?

所以接下來可以利用第二個作用域---Session

Session的生命週期為進入Web時到離開Web後

也就是在瀏覽網站的整個期間都是Session的作用域

除非離開網站或者關掉瀏覽器,不然Session都會一直活著

像是一開始登入會員後,以後的操作都不需要再認證身分了

原理是在登入會員時,將你的會員認證與資料寫在Session裡面了

所以每一次請求新頁面時,都可以去Session確認你的身分,不需要再重新驗證了

 

而Cookie到底是什麼呢

Session的物件存在於伺服器(程式)裡面

為了避免伺服器的負擔太重

所以我們將使用者的資料儲存在使用者的電腦裡面

而該資料檔案就是Cookie

Cookie存放的位置會隨著瀏覽器的不同而有所不同

只要程式對使用者的電腦寫入Cookie

之後使用者每次登入網站時

就可以直接去使用者的電腦找Cookie,使用之前的資料了

 

Cookie的存取寫得好,可以省去很多設定與查詢的時間

所以接下來要來簡單介紹一下Cookie的操作方法

設定Cookie的方法:
 

public ActionResult GetForm(string name)
{
    HttpCookie cookie = new HttpCookie("Test");  //建立一個Cookie名稱為Test
    cookie.Values["Name"] = name;  //儲存值使用key/value的方式
    cookie.Domain = "10.1.2.3";  //設定能使用該Cookie的網域(Domain)        
    cookie.Expires = DateTime.Now.AddMinutes(1);  //設定該Cookie的到期期限,時間到瀏覽器會自動刪除
    HttpContext.Response.Cookies.Add(cookie);  //將該Cookie加入Cookie集合

    return View("First");
}

從Cookie取值:

HttpCookie cookie = HttpContext.Request.Cookies["Test"];

if (cookie == null) //若Cookie不存在會回傳null
{
    ViewData["result"] = "No Cookie";
}

if (cookie != null) //若Cookie存在則使用Values[key]取值
{
    ViewData["result"] = cookie.Values["Name"];
}

刪除Cookie

HttpCookie cookie = new HttpCookie("Test");  //建立相同名稱的Cookie
cookie.Expires = DateTime.Now.AddDays(-1);  //設定使用期限為昨天
HttpContext.Response.Cookies.Add(cookie);  //加入(這裡為覆蓋/取代)

 

至於刪除Cookie的部分

Response.Cookies.Remove這個方法似乎是移除Server上的Cookie,而不是使用者端的

另外還有一個方法,若取得Cookie並設定使用期限後,使用HttpContext.Response.Cookies.Set方法也覆蓋不回去

詳細原因我不是很清楚,只知道大部分的寫法是像截圖那樣的處理方式

而且這一篇是一時興起練練之後的筆記

所以之後若是實戰中有使用到,或者對這部分的底層有更深入的了解的話

會再詳細寫一篇來分析研究吧

總之想玩玩看Cookie的人可以試試看~~~