欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

ViewState與Session

系統(tǒng) 1614 0
昨天偶然看到網(wǎng)上有人討論究竟是該用viewstate還是session來保存信息. 忽然覺得有必要去深入的研究一下這兩個東東了.

我們先來看深入分析一下viewstate, 為了分析的相對完整性,先從簡單的說起:

在asp時代, 大家都知道一個html控件的值,比如input 控件值,當我們把表單提交到服務器后, 頁面再刷新回來的時候, input里面的數(shù)據(jù)已經(jīng)被清空. 這是因為web的無狀態(tài)性導致的, 服務端每次把html輸出到客戶端后就不再于客戶端有聯(lián)系.

asp.net巧妙的改變了這一點. 當我們在寫一個asp.net表單時, 一旦標明了 form runat=server ,那么,asp.net就會自動在輸出時給頁面添加一個隱藏域

<input type="hidden" name="__VIEWSTATE" value="">

那么,有了這個隱藏域,頁面里其他所有的控件的狀態(tài),包括頁面本身的一些狀態(tài)都會保存到這個控件值里面. 每次頁面提交時一起提交到后臺,asp.net對其中的值進行解碼,然后輸出時再根據(jù)這個值來恢復各個控件的狀態(tài). 我們再看這個控件的value值,它可能類似如下的形式:Oz4+O2w8aTwxPjs+O2w8....
很多人會認為這是加密的信息,其實不是, ms僅僅是給各個控件和頁面的狀態(tài)存入適當?shù)膶ο罄锩?然后把該對象序列化, 最后再做一次base64編碼,直接賦值給viewstate控件.

說到這,想必你一定想看看這個viewstate里面到底存了哪些東西, 嗯,你是可以寫一個base64 to string的轉(zhuǎn)換代碼來實現(xiàn).不過,viewstate是有層次之分的,普通的轉(zhuǎn)換后,你看到的也是很亂的文字. 這里提供了一個專門轉(zhuǎn)換viewstate值的地方 http://www.wilsondotnet.com/Demos/ViewState.aspx . 你可以去將自己的viewstate輸入進去,讓它給你轉(zhuǎn)化一下,這可是帶結(jié)構(gòu)的哦

好, 以上說的這些你可能會覺得: 這與session有什么關(guān)系? 這個viewstate不是由asp.net自動去維護嗎? 是的, 如果僅僅是保存控件的狀態(tài), 你可以感覺不到它與session有什么瓜葛( 呵呵,其實它們就沒有瓜葛),不過,接下來,我們看看這種使用方法: 在后臺aspx.cs代碼里:

private void Page_Load(object sender, System.EventArgs e)
{
ViewState["myvalue"] = "viewstatevalue";
//.....
}

呵呵, 可以在頁面后臺直接給viewstate集合賦值, 現(xiàn)在你是不是覺得和session的使用方法差不多了呢? 對,這一點就是幾乎所有初學asp.net的人的疑惑. 會認為asp.net也像session那樣把這個值保存到服務器內(nèi)存里面, 其實不是!

那么,這里的viewstate值是屬于誰?又存在哪里? 其實,它和上面的其他控件的狀態(tài)保存一樣,也是存儲到那個隱藏的viewstate控件值里面, 上面已經(jīng)說了, viewstate用來保存狀態(tài),包括頁面本身, 那么,這里的viewstate就屬于頁面本身的狀態(tài).

分析到此,估計大家對viewstate的使用應該是沒有什么疑問了. 那么,我們可以來與session做一下類比, session值是保存在服務器內(nèi)存上,那么,可以肯定,大量的使用session將導致服務器負擔加重. 而viewstate由于只是將數(shù)據(jù)存入到頁面隱藏控件里,不再占用服務器資源,因此, 我們可以將一些需要服務器"記住"的變量和對象保存到viewstate里面. 而sesson則只應該應用在需要跨頁面且與每個訪問用戶相關(guān)的變量和對象存儲上. 另外,session在默認情況下20分鐘就過期,而viewstate則永遠不會過期.

但viewstate并不是能存儲所有的.net類型數(shù)據(jù),它僅僅支持String、Integer、Boolean、Array、ArrayList、Hashtable 以及自定義的一些類型.

當然,任何事物都有兩面性, 使用viewstate會增加頁面html的輸出量,占用更都的帶寬,這一點是需要我們慎重考慮的. 另外, 由于所有的viewstate都是存儲在一個隱藏域里面,用戶可以很容易的通過查看源碼來看到這個經(jīng)過base64編碼的值.然后再經(jīng)過轉(zhuǎn)換就可以獲取你存儲其中的對象和變量值.

其實,對于viewstate的安全性問題,asp.net還給我們提供了更多的選擇.一般如果要保護viewstate有兩種方式: 一種是防篡改,一種是加密. 一說到防篡改,我們就想起了使用散列代碼. 沒錯, 我們可以在頁面頂部加入如下代碼:Page EnableViewStateMAC=true

這樣asp.net就會自動的在viewstate中追加一個散列碼,在頁面回傳時,服務器根據(jù)回傳的viewstate生成一個散列碼,再與回傳的散列碼相比較,如果不對,則丟棄該viewstate,同時控件將恢復初試狀態(tài). (默認情況下asp.net是通過SHA1算法而不是md5算法來生成散列,不過這個可以在machine.config里面配置machineKey validation="MD5"即可)

而viewstate加密就更簡單了, 只要在machine.config里設(shè)置一下machineKey validation="3DES"即可實現(xiàn)用des加密viewstate了.

ViewState與Session


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲免费一区 | 中文字幕一区二区精品区 | 精品欧美一区二区三区免费观看 | 视频一区二区不卡 | 精品三级视频 | 欧美日韩在线免费 | 91网页在线观看 | 亚洲精品国精品久久99热 | 国产一区二区精品尤物 | 六月婷婷久久 | 国产一精品一av一免费爽爽 | 成人国产免费视频 | 精品一区二区三区四区五区 | 日韩欧美一区二区三区免费观看 | 91精品国产综合久久久久蜜臀 | 国产精品点击进入在线影院高清 | 精品a在线观看 | 国产乱码精品一区二区三区中 | 无遮挡又黄又爽又色的动态图1000 | 国产精品高清视亚洲乱码 | 成人午夜精品 | 另类二区三四 | 久久综合视频网站 | 激情五月六月婷婷 | 永久免费mv网站入口 | 国产亚洲精品sese在线播放 | 国产乱码一区二区三区 | chinese 军人 gay xx 呻吟 | 婷婷五月色综合香五月 | 日日摸夜夜添夜夜添破第一 | 狠狠干av | 成人午夜精品 | 精品国产日韩一区三区 | 久久99精品久久久久久国产越南 | 精品国产一区二区三区性色av | 美女操网站 | 成人免费视频一区 | 欧美精品 在线观看 | 日韩av电影免费看 | 91网站在线看 | 午夜影院试看五分钟 |