ASP.NET 中 Web MVC項目 學習記錄

1. viewData , viewBag , TempData , session之間的區別和特點?

viewdata:
ViewData是一個繼承自ViewDataDictionary類的Dictionary對象
ViewData用來:從Controller向對應的View傳遞值
ViewData的只在當前當前的請求中有效,生命週期和View相同,其值不能在多個請求中共享
在重定向(redirection)後,ViewData中存儲的變量值將變爲null
在取出ViewData中的變量值是,必須進行合適的類型轉換(隱式或顯式)和空值檢查。
viewBag:
ViewBag是一個動態類型變量(dynamic),這是C# 4.0引入的新特性,變量類型會在運行時進行解析。
ViewBag基本上是ViewData的包裝,也是用來:從Controller向View來傳遞值的。
ViewBag也只在當前的請求中有效
在重定向(redirection)後,ViewBag中存儲的變量值將變爲null
因爲ViewBag是動態類型,所以我們在取得其值時,不需要進行類型轉換
TempData:
TempData是一個繼承自TempDataDictionary類的字典對象,它默認情況下是基於Session存儲機制之上的
TempData是用來在多個Actions或從當前請求向子請求, 頁面發生了重定向(Redirection)時傳遞共享數據
只有在目標視圖(View)完全加載後纔有效。
在取出TempData存儲的變量值時,必須進行合適的類型轉換(隱式或顯式)和空值檢查
session:
Session也是ASP.NET MVC程序傳遞值的一種方式,但與TempData不同,[[用戶的整個會話中Session都不會過期]]。
Session在同一用戶會話過程中的所有請求中有效,比如,刷新頁面。
Session中的值也需要進行類型轉換(隱式或顯式)和非空檢查
Session主要用在需要在多個Controllers, Actions and Views共享數據(非敏感數據)時使用。
總結:
如果頁面發生了跳轉(Redirection),ViewBag和ViewData中的值將不復存在, 但是TempData中的值依然還在。 
換句話講, ViewBag和ViewData存儲的值的生命週期只有在從Controller到View中, 而TempData中的數據不僅在從Controller到View中有效,在不同的Action之間或者從一個頁面跳轉到另一頁面(Controller to Controller)後依然有效。
TempData["Message"] = "Hello ASP.NET MVC";

Session其實和ViewData類似,也是一個String Key/Object Value字典數組。但是,Session是存儲在客戶端的Cookies中,所以它的生命週期是最長的。 但是,正因爲其存儲的客戶端, 所以必須確保沒有敏感機密的信息存儲其中。
Session["Message"] = "Hello ASP.NET MVC";

2. cookie和session區別聯繫?

查看網址:https://www.cnblogs.com/endlessdream/p/4699273.html

1、無狀態的HTTP協議:

協議是指計算機通信網絡中兩臺計算機之間進行通信所必須共同遵守的規定或規則,

超文本傳輸協議(HTTP)是一種通信協議,它允許將超文本標記語言(HTML)文檔從Web服務器
傳送到客戶端的瀏覽器。

HTTP協議是無狀態的協議。一旦數據交換完畢,客戶端與服務器端的連接就會關閉,再次交換數據需要建立新的連接。
這就意味着服務器無法從連接上跟蹤會話。
  
2、會話(Session)跟蹤:

  會話,指用戶登錄網站後的一系列動作,比如瀏覽商品添加到購物車併購買。
會話(Session)跟蹤   是Web程序中常用的技術,用來跟蹤用戶的整個會話。
常用的會話跟蹤技術
Cookie通過在客戶端記錄信息確定用戶身份,Session通過在服務器端記錄信息確定用戶身份。

Cookie有兩種?
會話Cookie和持久Cookie

若不設置過期時間,則表示這個cookie的生命期爲瀏覽器會話期間,關閉瀏覽器窗口,cookie就消失。這種生命期爲瀏覽器會話期的cookie被稱爲會話cookie。
會話cookie一般不存儲在硬盤上而是保存在內存裏,當然這種行爲並不是規範規定的。

若設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉後再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。存儲在硬盤上的cookie可以在瀏覽器的不同進程間共享。
這種稱爲持久Cookie
Cookie具有不可跨域名性
就是說,瀏覽器訪問百度不會帶上谷歌的cookie

Session是另一種記錄客戶狀態的機制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務器上。

客戶端瀏覽器訪問服務器的時候,服務器把客戶端信息以某種形式記錄在服務器上。
這就是Session。客戶端瀏覽器再次訪問時只需要從該Session中查找該客戶的狀態就可以了。

每個用戶訪問服務器都會建立一個session,那服務器是怎麼標識用戶的唯一身份呢?事實上,用戶與服務器建立連接的同時,服務器會自動爲其分配一個SessionId。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章