[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day11 – User State
前言        
介紹完使用JavaScript與user的互動之後,        
接著就是在網頁上,通常我們會需要暫時記錄一些值,可能只有這一頁,可能只有這一個連線,可能需要跨頁,可能整個web site都是同一份,        
所以我們需要瞭解,在ASP.NET除了把值存入DB以外,還有哪些方式可以輔助我們記值。        
他們的取捨平衡點、適用情況、該注意的問題有哪一些。        
        
之前也有先整理一篇部分的,這邊也先附上來當參考,[ASP.NET]ViewState、Session、Cookies、Application State比較    
不過為了避免分兩份,所以我這一篇重點是在完整性,就不管兩篇文章重複的部分了。 
    
- ViewState
- 只存在於正在執行那一頁,通常用於postback記值(因為http無狀態)。
 - 原理是HTML上的hidden field,會透過Base-64編碼
 - webconfig裡可以透過設定來加密:<pages viewStateEncryptionMode="Always" />
 - 通常server control會透過viewstate來保存其屬性值,也是傳統ASP.NET web form重整頁面最容易碰到的效率問題。可透過EnableViewState屬性開關。
 - 可存放可序列化的Object (一般程式用到普遍最大的應該也只是hash table吧 )
 
 - Session
- 可存在於該連線,不同頁面,通常用來跨多頁傳些比較重要、需要安全的值。如果是前後頁面關連性的值,只需要用URL parameter即可。Session的意義比較像是在什麼樣的情況下,開始或變更了某個Session的值。
 - 類似跨網頁的全域變數
 - 佔用Server端記憶體,連線數量一暴增,記憶體很可能被操掛。
 - 預設存在記憶體裡,可以改存在Session State Server或DB。(如果放在Session State Server或者DB,存放的物件也必須是可序列化的)
 - 可設定存活時間,但發生錯誤或特定情況時,會導致Session遺失。請參考:http://www.dotblogs.com.tw/hatelove/archive/2009/12/25/sessionmiss.aspx
 
 - Cookies
- 單一使用者,存在client端,讀的到就活著。
 - 需注意安全性考量,通常用在個人化portal或profile。
 - 有些single sign on會透過cookie(加密)來存放帳號資訊。
 - String格式存放。
 
 - Cache
- 吃Server記憶體。
 - 可設定時間、hit rate或先進先出來當作條件。
 - 通常應用在靜態網頁快取。
 
 - Application
- 在Server上所有User存取同一份。
 - 當Web application重起或關閉時結束。
 - 吃Server記憶體。
 
 - QueryString
- 串在Url?後面那一串,key-value pair,每一組key-value pair用&區隔,例如url?key1=value1&key2=value2,value應該要經過UrlEncode編碼,避免錯誤
 - 如有重要資訊,可能要經過加密傳遞
 - Url有長度限制
 - 用Request.QueryString[key]就可以得到該Key的Value
 
 - Config file & Resource file
- webconfig
- 比較常用的是AppSetting:           
取值WebConfigurationManager.AppSettings.Get("AppCode")
XML設定: 
<appSettings> <!-- 我的AP環境設定參數 --> <add key="AppCode" value="http://www.dotblogs.com.tw/hatelove/" /> <appSettings>- 自訂webconfig區段
 
 - 比較常用的是AppSetting:           
 - Resource file: Resources.你的Resource檔名.ResourceManager.GetString(你的key)
 
 - webconfig
 
參考資源:     
Nine Options for Managing Persistent User State in Your ASP.NET Application
 
 
 最後,請想學習的客倌,看完這篇文章思考一下,下列的問題該如何回答:
- ViewState的適用情況,需考慮的情況,什麼東西可以放進去,存在於哪裡,只能存在多久?
 - Session的適用情況,需考慮的情況,什麼東西可以放進去,存在於哪裡,只能存在多久?
 - Cookies的適用情況,需考慮的情況,什麼東西可以放進去,存在於哪裡,只能存在多久?
 - Cache的適用情況,需考慮的情況,什麼東西可以放進去,存在於哪裡,只能存在多久?
 - QueryString的適用情況,需考慮的情況,什麼東西可以放進去,存在於哪裡,只能存在多久?
 - Config file & Resource file的適用情況,需考慮的情況,什麼東西可以放進去,存在於哪裡,只能存在多久?
 
blog 與課程更新內容,請前往新站位置:http://tdd.best/
