[ASP.NET MVC] ASP.NET MVC 傳遞資料容器(三) - 總結


前兩篇把 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 用戶的資訊也是有可能。


新手發文,如有錯誤煩請告知,感謝。
如果喜歡我的文章請按推薦,有任何問題歡迎下面留言~~~

 

 

簽名:

學習這條路很廣,喜歡什麼技術不重要,重要的是你肯花時間去學習