前兩篇把 ASP.NET MVC 中傳遞資料的物件特性介紹過了,分別為:ViewData、ViewBag 以及 TempData 這三種儲存容器,這三者之間有共通的地方也有不太一樣的地方,而在 ASP.NET MVC 中還有其他幾種儲存資料的容器,包誇 Session、Cookie、ApplicationState 等,這邊小弟就為大家整理了關於這幾種資料儲存容器之間的差異。
前言
前兩篇把 ASP.NET MVC 中傳遞資料的物件特性介紹過了,分別為:ViewData、ViewBag 以及 TempData 這三種儲存容器,這三者之間有共通的地方也有不太一樣的地方,而在 ASP.NET MVC 中還有其他幾種儲存資料的容器,包誇 Session、Cookie、ApplicationState 等,這邊小弟就為大家整理了關於這幾種資料儲存容器之間的差異。
資料整理
特性 | ViewData | TempData | Session | Cookie | Application |
生命週期 | 短,只存在一個 Action | 短,存在1次的 Request | 長,預設為20分鐘,可以調整 | 長,預設為直到瀏覽器關閉為止,可以調整 | 長,直到應用程式結束或重啟 |
儲存端 | Server | Server | Server | Client | Server |
跨多台Server | 無,因為其無需跨多台Server | 因為是設定在Sesstion,所以看Session的設定 | 預設是無法跨多台Server,但可以改成存放在SQL Server | 可以設定Cookie的Domain,讓同個Domain的Server共同使用 | 無 |
使用者共用性 | 無 | 無 | 無 | 無 | 有 |
使用時機 | 從 Controller 傳遞小量資料到 Action 時使用 | 當資料需暫時存放,而在下次進入頁面時讀取出來使用 | 存放每個使用者的特殊資訊,EX:限制使用者登入時間,若逾時則需重新登入 | 記錄在Client端,可存放使用者個人的喜好資訊 | 存放例如權限設定、訪客人數 |
範例程式碼
Session
使用方式和 TempData 很像,都是透過 Key / Value 來存放資料
Session["UserName"] = User.Identity.Name;
Cookie
// Set Cookie
HttpCookie Cookie = new HttpCookie("User", "admin");
Cookie.Expires = DateTime.Now.AddDays(1); //設置Cookie到期時間
HttpContext.Response.Cookies.Add(Cookie);
// 取得Cookie
string User = Request.Cookies["User"].ToString();
Application
因為 Applicatio 所存放的資訊是為了儲存整個 Server 中的資訊,例如系統參數、或是拜訪人數,在 MVC 中也可以在 Global 中設定來初始化 Application,如下:
protected void Application_Start()
{
Application["Visit"] = 0;
}
而需要讀取 Application 只需透過 HttpContext.Application 來讀取參數或是設置參數,如下:
HttpContext.Application["Visit"] = int.Parse(HttpContext.Application["Visit"].ToString()) + 1
總結
三篇的介紹 ASP.NET MVC 的資料儲存容器,每個方法之間各有各的優缺點,在使用上也要非常小心,例如:使用Cookie的部份別忘記將 HttpOnly 設成 true 來防止 XSS 攻擊,或是使用 Session 時也需注意權限的控管,因為一不小心使用錯了可能造成 B 用戶讀取到 A 用戶的資訊也是有可能。
新手發文,如有錯誤煩請告知,感謝。
如果喜歡我的文章請按推薦,有任何問題歡迎下面留言~~~
簽名:
學習這條路很廣,喜歡什麼技術不重要,重要的是你肯花時間去學習