| 狀態 | 儲存位置 | 生命週期 | 可視範圍 |
| Session | 伺服器 | 只要符合下列任一個條件,Session的生命週期就會結束 1. 使用者在最後一次操作後,超過網站預設的逾期時間到期。 2. 使用者關閉所有瀏覽器視窗 | 同一個使用者的連線下的所以網頁 |
| Cookie | 用戶端 | 1. 時效逾期 2. 程式或使用者刪除Cookie | 同一個網域下的所有網頁 |
| Application | 伺服器 | 網站最後一個瀏覽的使用者離開後,在預定的時間後到期 | |
| ViewState | 用戶端 | 頁面未跳轉到其它頁面之前 | 同一網頁下的所有程式碼 |
一、Session
Session 是一種網站使用者之間彼此不共享的空間,所以它很適合用來保存使用者個人的狀態,例如是否已經登入網站、購物車清單 ... 等等,
但是因為 Session 是保存在伺服器的記憶體中,所以除了 Session 逾期的時候,Session 內容會消失之外,像是伺服器重置、網站重置,都會讓 Session 的內容被清除掉。
適合的時機 : 登入狀態、購物車清單
二、Cookie
Cookie 跟 Session 在空間的操作上相同,一樣是網站使用者之間彼此不共享的空間,不同的則是,Session 的資料是保存在網站伺服器,而 Cookie 則是存放在使用者端的瀏覽器中 (不同的瀏覽器之間,Cookie 內容也是不共用),
雖然 Cookie 看起來也是私密的資料空間,但是因為內容是保存在使用者端,相對地就很有可能被使用者電腦上的惡意程式盜用。
適合的時機 : 登入狀態、購物車清單
三、Application
Application 是一塊配置在伺服器上公開的記憶體空間,因為它是公開的空間,所以非常適合用來存放一些使用者共享的資料,例如目前線上人數的計數器,公開的文章內容、公開的商品內容等等,
適合的時機 : 保留文章內容、商品內容
四、ViewState
有別於前面三種狀態管理技術,ViewState 是 ASP.NET 特有的狀態機制,它的內容被保存在獨立的頁面中,當使用者瀏覽帶有 ViewState 變數的頁面時,ViewState 的資料會被夾帶在頁面裡頭,一起被下載到瀏覽器,
ViewState 因為不會佔用伺服器的記憶體,而且只有當下這個頁面能夠存取,所以很適合用來存放一些臨時性、只有這個頁面會用到的資料,
但是要注意的是,雖然 ViewState 不會佔用記憶體,但是因為它每次都會跟著頁面被下載到瀏覽器,所以它反而會佔用網站的頻寬,而且由於它的內容會經過 Base64 編碼 (編碼與加密是不同的作業),所以內容會比原本的資料量還大,
另外,初學者很容易誤解 ViewState 的內容是經過加密處理的,其實不是,就像上一段寫的,它只是經過 Base64 編碼而已,Base64 編碼後的內容是任何人都可以反解回來的。
適合的時機 : 單一頁面的臨時性資料
沒有留言:
張貼留言