iT邦幫忙

DAY 11
6

ASP.NET 由淺入深系列 第 11

91之ASP.NET由淺入深 不負責講座 Day11 - User State

介紹完使用JavaScript與user的互動之後,
接著就是在網頁上,通常我們會需要暫時記錄一些值,可能只有這一頁,可能只有這一個連線,可能需要跨頁,可能整個web site都是同一份,
所以我們需要瞭解,在ASP.NET除了把值存入DB以外,還有哪些方式可以輔助我們記值。
他們的取捨平衡點、適用情況、該注意的問題有哪一些。
1.ViewState
-只存在於正在執行那一頁,通常用於postback記值(因為http無狀態)。
-原理是HTML上的hidden field,會透過Base-64編碼
-webconfig裡可以透過設定來加密:<pages viewStateEncryptionMode="Always" />
-通常server control會透過viewstate來保存其屬性值,也是傳統ASP.NET web form重整頁面最容易碰到的效率問題。可透過EnableViewState屬性開關。
-可存放可序列化的Object (一般程式用到普遍最大的應該也只是hash table吧 )

2.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

3.Cookies
-單一使用者,存在client端,讀的到就活著。
-需注意安全性考量,通常用在個人化portal或profile。
-有些single sign on會透過cookie(加密)來存放帳號資訊。
-String格式存放。

4.Cache
-吃Server記憶體。
-可設定時間、hit rate或先進先出來當作條件。
-通常應用在靜態網頁快取。

5.Application
在Server上所有User存取同一份。
當Web application重起或關閉時結束。
吃Server記憶體。

6.QueryString
-串在Url?後面那一串,key-value pair,每一組key-value pair用&區隔,例如url?key1=value1&key2=value2,value應該要經過UrlEncode編碼,避免錯誤
-如有重要資訊,可能要經過加密傳遞
-Url有長度限制
-用Request.QueryString[key]就可以得到該Key的Value

7.Config file & Resource file
-webconfig
(1)比較常用的是AppSetting:
取值WebConfigurationManager.AppSettings.Get("AppCode")
XML設定:

<appSettings>
    <!-- 我的AP環境設定參數 -->
    <add key="AppCode" value="http://www.dotblogs.com.tw/hatelove/" />
<appSettings>

(2)自訂webconfig區段
[ASP.NET]撰寫自己的 Configuration 區段 Part 1:不要再賴在 appSettings 的屋簷下了,寫個自己的 Configuration 區段吧~
[ASP.NET]撰寫自己的 Configuration 區段 Part 2: 將自己的組態組織成一個 Group
[ASP.NET]撰寫自己的 Configuration 區段 Part 3: 自訂組態集合

-Resource file: Resources.你的Resource檔名.ResourceManager.GetString(你的key)

附上參考來源 from MSDN magazine:

最後,請想學習的客倌,看完這篇文章思考一下,下列的問題該如何回答:
1.ViewState的適用情況,需考慮的情況,什麼東西可以放進去,存在於哪裡,只能存在多久?
2.Session的適用情況,需考慮的情況,什麼東西可以放進去,存在於哪裡,只能存在多久?
3.Cookies的適用情況,需考慮的情況,什麼東西可以放進去,存在於哪裡,只能存在多久?
4.Cache的適用情況,需考慮的情況,什麼東西可以放進去,存在於哪裡,只能存在多久?
5.QueryString的適用情況,需考慮的情況,什麼東西可以放進去,存在於哪裡,只能存在多久?
6.Config file & Resource file的適用情況,需考慮的情況,什麼東西可以放進去,存在於哪裡,只能存在多久?


上一篇
91之ASP.NET由淺入深 不負責講座 Day10 - 如何註冊執行一段JavaScript
下一篇
91之ASP.NET由淺入深 不負責講座 Day12 - Validator
系列文
ASP.NET 由淺入深30

1 則留言

0
timloo
iT邦研究生 2 級 ‧ 2010-10-08 09:12:04

您最後的問題,常常發人深省,
我常覺得這些東西(目前的程度),基本上都大同小異,很想只用最大的來包含最小的(如果可能的話)

有欠主題嗎?

請把多國語言(至少是繁/簡/英)放進來,感恩哦!!

就是91 iT邦研究生 4 級 ‧ 2010-10-08 09:26:31 檢舉

先謝謝您的回應,很感謝您看完文章還願意給我意見。
您說的沒錯,正因為見到大部分比較junior的工程師,都會用最大的來包含最小的,也因為開發時沒有壓力測試或沒去瞭解user site使用的狀況,所以還蠻常造成開發時沒問題,上線後問題一堆的情況。
所以我才大概整理一下這幾種暫存user state的方式,希望大家可以知道什麼樣子的情況,應該要用什麼樣子的方式去達到目的。
可以在彈性、效率、安全性等等議題之間,取得一個平衡點。

另,主題的部分,目前是沒有缺啦,我一開始就規劃好要整理跟分享哪些部分了,因為後面還有一大段是進階的議題整理。
不過很感謝您提供的意見,如果可以的話,我會把多國語言的部分放進來。我也不一定只會分享30天唷 讚 如果您是有比較迫切的需要,建議您可以到http://www.dotblogs.com.tw/default.aspx搜尋一下『多國語言』,會有蠻多文章可以參考的

我要留言

立即登入留言