相信大家對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的人可以試試看~~~