日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Session,ViewState用法

發(fā)布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Session,ViewState用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Session,ViewState用法
基本理論:
session值是保存在服務(wù)器內(nèi)存上,那么,可以肯定,大量的使用session將導(dǎo)致服務(wù)器負擔(dān)加重. 而viewstate由于只是將數(shù)據(jù)存入到頁面隱藏控件里,不再占用服務(wù)器資源,因此, 我們可以將一些需要服務(wù)器"記住"的變量和對象保存到viewstate里面. 而sesson則只應(yīng)該應(yīng)用在需要跨頁面且與每個訪問用戶相關(guān)的變量和對象存儲上. 另外,session在默認情況下20分鐘就過期,而viewstate則永遠不會過期.
數(shù)據(jù)類型:
但viewstate并不是能存儲所有的.net類型數(shù)據(jù),它僅僅支持String、Integer、Boolean、Array、ArrayList、Hashtable 以及自定義的一些類型.
其他考慮
當(dāng)然,任何事物都有兩面性, 使用viewstate會增加頁面html的輸出量,占用更都的帶寬,這一點是需要我們慎重考慮的. 另外, 由于所有的viewstate都是存儲在一個隱藏域里面,用戶可以很容易的通過查看源碼來看到這個經(jīng)過base64編碼的值.然后再經(jīng)過轉(zhuǎn)換就可以獲取你存儲其中的對象和變量值.
其實,對于viewstate的安全性問題,asp.net還給我們提供了更多的選擇.一般如果要保護viewstate有兩種方式: 一種是防篡改,一種是加密. 一說到防篡改,我們就想起了使用散列代碼. 沒錯, 我們可以在頁面頂部加入如下代碼:Page EnableViewStateMAC=true。這樣asp.net就會自動的在viewstate中追加一個散列碼,在頁面回傳時,服務(wù)器根據(jù)回傳的viewstate生成一個散列碼,再與回傳的散列碼相比較,如果不對,則丟棄該viewstate,同時控件將恢復(fù)初試狀態(tài). (默認情況下asp.net是通過SHA1算法而不是md5算法來生成散列,不過這個可以在machine.config里面配置machineKey validation="MD5"即可),而viewstate加密就更簡單了, 只要在machine.config里設(shè)置一下machineKey validation="3DES"即可實現(xiàn)用des加密viewstate了.
使用方法
怎么在客戶端,存取ViewState?
應(yīng)用環(huán)境
一些與安全性無關(guān),數(shù)據(jù)量較小,需要長時間操作的參數(shù),應(yīng)該用ViewState存取。
在webgis中,地圖的各種相關(guān)狀態(tài),如zoom, center, layers, visibility等,用viewstate存取的話,就不存在session過期的問題,網(wǎng)頁可以永遠使用,甚至可以下載保存,在進行地圖請求,或iframe到第三方的應(yīng)用中。
昨天看到一個文章,作者在自己的頁面中定義了幾個全局變量,類型是static,但是這樣的定義會存在問題,當(dāng)一個用戶訪問的時候不會有問題,但是當(dāng)大量用戶并發(fā)訪問系統(tǒng)的時候,頁面中的這些static類型的全局變量就會出現(xiàn)問題了,然后作者改用了Session變量保存以前由static類型全局變量紀(jì)錄的數(shù)據(jù),因為Session是狀態(tài)量,只是和某個訪問進程相關(guān),這樣就不會出現(xiàn)由于static類型引起的問題了。
但是這樣的話系統(tǒng)中的Session就太多了,我總認為這樣不太好,雖然每個一個Session都有一個ID不會沖突。ASP.NET引入了ViewState,可以記錄同一個頁面的不同PostBack中的一些數(shù)據(jù)值。
所以我的解決方法是:使用例如ViewState["name"]這樣的形式記錄以前static的全局變量,這樣就可以避免這個問題了,因為我的系統(tǒng)是在局域網(wǎng)使用的,ViewState帶來的多余的數(shù)據(jù)量可以忽略不計了。
asp.net ViewState用法:
ASP.NET中的ViewState是ASP.NET中用來保存WEB控件回傳時狀態(tài)值一種機制.在WEB窗體(FORM)的設(shè)置為runat="server",這個窗體(FORM)會被附加一個隱藏的屬性_VIEWSTATE._VIEWSTATE中存放了所有控件在ViewState中的狀態(tài)值.
ViewState是類Control中的一個域,其他所有控件通過繼承Control來獲得了ViewState功能.它的類型是system.Web.UI.StateBag,一個名稱/值的對象集合.
當(dāng)請求某個頁面時,ASP.NET把所有控件的狀態(tài)序列化成一個字符串,然后做為窗體的隱藏屬性送到客戶端.當(dāng)客戶端把頁面回傳時,ASP.NET分析回傳的窗體屬性,并賦給控件對應(yīng)的值.當(dāng)然這些全部是由ASP.NET負責(zé)的.
定義ViewState屬性
Public int PageCount
{
get{return(int)ViewState["PageCount"];}
set{ViewState["PageCount"]=value;}
}
使用ViewState的條件
如果要使用ViewState,則在ASPX頁面中必須有一個服務(wù)器端窗體標(biāo)記(<form runat=server>).窗體字段是必需的,這樣包含ViewState信息的隱藏字段才能回傳給服務(wù)器.而且,該窗體還必須是服務(wù)器端的窗體,這樣在服務(wù)器上執(zhí)行該頁面時,ASP.NET頁面框架才能添加隱藏的字段.
Page的EnableViewState屬性值為true.
控件的EnableViewState屬性值為true.
提醒:
1.當(dāng)存在頁面回傳時,不需要維持控件的值就要把ViewState禁止.
2.ViewState的索引是大小寫敏感的.
3.ViewState不是跨頁面的.
4.為了能保存在ViewState中,對象必須是可流化或者定義了TypeConverter.
5.控件TextBox的TextMode屬性設(shè)置為Password時,它的狀態(tài)將不會被保存在ViewState中,這應(yīng)該是出于安全性的考慮.
6.在頁面沒有回傳或重定向或在回傳中轉(zhuǎn)到(transfer)其他頁面時不要使用ViewState.
7.在動態(tài)建立控件時要小心它的ViewState.
8.當(dāng)禁止一個程序的ViewState時,這個程序的所有頁面的ViewState也被禁止了.
9.只有當(dāng)頁面回傳自身時ViewState才是持續(xù)的.
10.將一個頁面的控件傳輸?shù)搅硗庖粋€頁面(第二個頁面)時,通常會出現(xiàn)錯誤。解決方法是在第二個頁面中將viewstate禁用。
啟用和禁止ViewState
在默認情況下,所有服務(wù)器控件的viewstate開啟狀態(tài),通過以及幾種途徑來禁止。
1.頁面級別
2.控件級別
3.應(yīng)用程序級別
4.機器級別
頁面級別禁止的方法是在頁面的開始寫入
<%@ Page EnableViewState ="False" %>
or
<%@ Page EnableViewState ="True" %>
控件級別是
<asp:TextBox id="txtCode" runat="server” EnableViewState="false" />
or
<asp:TextBox id="
txtCode" runat="server" EnableViewState="true" />
程序級別是在web.config中
<pages enableViewState="
false" />
or
<pages enableViewState="
true" />
機器級別是在machine.config中
<pages enableViewState="
true" enableViewStateMac="true" ... />
or
<pages enableViewState="
false" ... />
在viewstate中保存和取出值
viewstate能處理以下的類型
基本類型,基本類型數(shù)組,ArrayList 和Hashtable,任何可以序列化的對象。
以下代碼是將ArrayList存到viewstate中并取出
ArrayList obj = new ArrayList();
//Some code
ViewState["
ViewStateObject"] = obj;
obj = ViewState["
ViewStateObject"];

轉(zhuǎn)載于:https://www.cnblogs.com/zxj159/articles/2428404.html

總結(jié)

以上是生活随笔為你收集整理的Session,ViewState用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。