2011年5月16日 星期一

說好的「狀態管理變數」比較表

狀態

儲存位置

生命週期

可視範圍

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 編碼後的內容是任何人都可以反解回來的。

適合的時機 : 單一頁面的臨時性資料

沒有留言:

張貼留言