ASP.NET中的狀態(tài)管理_.Net教程
推薦:超簡(jiǎn)單實(shí)現(xiàn) .NET開(kāi)發(fā)類(lèi)似Web Parts的功能微軟推出SharePoint2003 ,SharePoint2007以來(lái),一個(gè)新的技術(shù)Web Parts也隨著推出來(lái)了。剛一接觸到這個(gè)東西,作為了一個(gè)開(kāi)發(fā)人員,感到十分的好奇,這雖然算不上一次技術(shù)上的革命,但對(duì)用戶(hù)的體
我們?cè)贏SP中能夠通過(guò)cookie、查詢(xún)字符串、應(yīng)用程序、對(duì)話(huà)等輕易地解決這些問(wèn)題。現(xiàn)在到了ASP.NET環(huán)境中,我們?nèi)匀豢梢允褂眠@些功能,只是它們的種類(lèi)更多了,功能也更強(qiáng)大了。
管理互聯(lián)網(wǎng)網(wǎng)頁(yè)主要有二種不同的方法:客戶(hù)端和服務(wù)器端。
1、客戶(hù)端的狀態(tài)管理:
在客戶(hù)端、服務(wù)器之間的多次請(qǐng)求-應(yīng)答期間,服務(wù)器上不保存信息,信息將被存儲(chǔ)在網(wǎng)頁(yè)或用戶(hù)的計(jì)算機(jī)上。
A、Cookie
cookie是存儲(chǔ)在客戶(hù)端文件系統(tǒng)的文本文件中或客戶(hù)端瀏覽器對(duì)話(huà)的內(nèi)存中的少量數(shù)據(jù),它主要用來(lái)跟蹤數(shù)據(jù)設(shè)置。下面我們舉例說(shuō)明:假設(shè)我們要定制化一個(gè)歡迎互聯(lián)網(wǎng)網(wǎng)頁(yè),當(dāng)用戶(hù)請(qǐng)求缺省的互聯(lián)網(wǎng)網(wǎng)頁(yè)時(shí),應(yīng)用程序會(huì)首先檢查用戶(hù)在此前是否已經(jīng)注冊(cè),我們可以從cookie中獲取用戶(hù)的信息:
[c#]
if (Request.Cookies[“username”]!=null)
lbMessage.text=”Dear “ Request.Cookies[“username”].Value ”, Welcome shopping here!”;
else
lbMessage.text=”Welcome shopping here!”;
如果要存儲(chǔ)用戶(hù)的資料,我們可以使用下面的代碼:
[c#]
Response.Cookies[“username’].Value=username;
這樣,當(dāng)用戶(hù)請(qǐng)求該網(wǎng)頁(yè)時(shí),我們就可以方便地識(shí)別該用戶(hù)。
B、隱藏域
隱藏域不會(huì)顯示在用戶(hù)的瀏覽器中,但我們可以象設(shè)置標(biāo)準(zhǔn)控制的屬性那樣設(shè)置其屬性。當(dāng)一個(gè)網(wǎng)頁(yè)被提交給服務(wù)器時(shí),隱藏域的內(nèi)容和其他控制的值一塊兒被送到HTTP Form集合中。隱藏域可以是任何存儲(chǔ)在網(wǎng)頁(yè)中的與網(wǎng)頁(yè)有關(guān)的信息的存儲(chǔ)庫(kù),隱藏域在其value屬性中存儲(chǔ)一個(gè)變量,而且必須被顯性地添加在網(wǎng)頁(yè)上。
ASP.NET中的HtmlInputHidden控制提供了隱藏域的功能。
[c#]
protected System.Web.UI.HtmlControls.HtmlInputHidden Hidden1;
file://給隱藏域賦值
Hidden1.Value=”this is a test”;
file://獲得一個(gè)隱藏域的值
string str=Hidden1.Value;
需要注意的是,要使用隱藏域,就必須使用HTTP-Post方法提交互聯(lián)網(wǎng)網(wǎng)頁(yè)。盡管其名字是隱藏域,但它的值并不是隱藏的,我們可以通過(guò)“查看源代碼”功能找到它的值。
C、狀態(tài)查看
包括網(wǎng)頁(yè)本身在內(nèi)的Web Forms網(wǎng)頁(yè)上的每個(gè)控制都有一個(gè)名字為ViewState的屬性,它是一個(gè)自動(dòng)保持網(wǎng)頁(yè)和控制狀態(tài)的內(nèi)置結(jié)構(gòu),這意味著在向服務(wù)器提交網(wǎng)頁(yè)后,我們無(wú)需采取任何措施來(lái)恢復(fù)控制的數(shù)據(jù)。
在這里,對(duì)我們有用的是ViewState屬性,我們可以利用它來(lái)保存與服務(wù)器之間多次的請(qǐng)求-應(yīng)答期間的信息。
[c#]
file://保存信息
ViewState.Add(“shape”,”circle”);
file://獲取信息
string shapes=ViewState[“shape”];
注意:與隱藏域不同的是,在使用查看源代碼功能時(shí),ViewState屬性的值是不可見(jiàn)的,它們是被壓縮和加密的。
D、查詢(xún)字符串
查詢(xún)字符串提供了一種簡(jiǎn)單而受限制的維護(hù)狀態(tài)信息的方法,我們可以方便地將信息從一個(gè)網(wǎng)頁(yè)傳遞給另一個(gè)網(wǎng)頁(yè),但大多數(shù)瀏覽器和客戶(hù)端裝置都把URL的長(zhǎng)度限制在255個(gè)字符長(zhǎng)。此外,查詢(xún)值是通過(guò)URL傳遞給互聯(lián)網(wǎng)的,因此,在有些情況下,安全就成了一個(gè)大問(wèn)題。
帶有查詢(xún)字符串的URL如下所示:
http://www.examples.com/list.aspx?categoryid=1&;productid=101
當(dāng)有客戶(hù)端請(qǐng)求list.aspx后,可以通過(guò)下面的代碼獲取目錄和產(chǎn)品信息:
[c#]
string categoryid, productid;
categoryid=Request.Params[“categoryid”];
productid=Request.Params[“productid”];
注意,我們只能使用HTTP-Get提交該互聯(lián)網(wǎng)網(wǎng)頁(yè),否則就不能從查詢(xún)字符串獲得需要的值。
2、服務(wù)器端的狀態(tài)管理
信息存儲(chǔ)在服務(wù)器上,盡管其安全性較高,但會(huì)占用較多的web服務(wù)器資源。
A、Aplication對(duì)象
Aplication對(duì)象提供了一種讓所有在Web應(yīng)用服務(wù)器中運(yùn)行的代碼訪(fǎng)問(wèn)的存儲(chǔ)數(shù)據(jù)的機(jī)制,插入應(yīng)用程序?qū)ο鬆顟B(tài)變量的數(shù)據(jù)應(yīng)該能夠被多個(gè)對(duì)話(huà)共享,而且不會(huì)頻繁地改變。正是因?yàn)樗軌虮蝗繎?yīng)用程序所訪(fǎng)問(wèn),因此,我們需要使用Lock和UnLock對(duì)避免其中的值出現(xiàn)沖突。
[c#]
Application.Lock();
Application[“mydata”]=”mydata”;
Application.UnLock();
B、Session對(duì)象
Session對(duì)象可以用來(lái)存儲(chǔ)需要在服務(wù)器的多次請(qǐng)求-應(yīng)答期間和對(duì)網(wǎng)頁(yè)的請(qǐng)求期間進(jìn)行維護(hù)的指定對(duì)話(huà)的信息。Session對(duì)象是每個(gè)對(duì)話(huà)的存在的基礎(chǔ),也就是說(shuō)不同的客戶(hù)端生成不同的Session對(duì)象。存儲(chǔ)在對(duì)話(huà)狀態(tài)變量中的數(shù)據(jù)存在的周期較短。
每個(gè)活動(dòng)的ASP.NET對(duì)話(huà)是由一個(gè)包含合法的URL ASCII字符、長(zhǎng)度為120位的SessionID字符串唯一確定和跟蹤的。SessionID的值是由一個(gè)能夠保證唯一性的算法生成的,以便對(duì)話(huà)之間不會(huì)沖突,SessionID的隨意性使得我們很難猜測(cè)出一介現(xiàn)有對(duì)話(huà)的ID。
根據(jù)應(yīng)用程序的配置設(shè)置情況,SessionID通過(guò)HTTP cookie或修改后的URL在客戶(hù)端-服務(wù)器請(qǐng)求之間進(jìn)行傳輸。那么,如何設(shè)置應(yīng)用程序配置的對(duì)話(huà)裝備方法。
每個(gè)web應(yīng)用程序必須有一個(gè)名字為web.config的配置文件,它是基于xml(標(biāo)準(zhǔn)化越來(lái)越近了)文件的。下面是一個(gè)名字為sessionState的對(duì)話(huà):
cookieless選項(xiàng)的值為true或false。當(dāng)其值為false(缺省值)時(shí),ASP.NET將使用HTTP cookie來(lái)識(shí)別用戶(hù);當(dāng)其值是true時(shí),ASP.NET將隨機(jī)地生成一個(gè)唯一的號(hào)碼,并將它放在被請(qǐng)求的文件的前面,這一號(hào)碼是用來(lái)識(shí)別用戶(hù)的,我們能夠在IE的地址欄中看到它:
http://localhost/Management/(2yzakzez3eqxut45ukyzq3qp)/Default.aspx
OK,下面我們?cè)倩氐絪ession對(duì)象。
[c#]
file://存儲(chǔ)信息
Session[“myname”]=”Mike”;
file://獲得信息
myname=Session[“myname”];
C、數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)將使我們能夠存儲(chǔ)大量的與Web應(yīng)用程序中的狀態(tài)相關(guān)的信息,有時(shí),用戶(hù)會(huì)使用唯一的ID頻繁地訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),我們可以將它存儲(chǔ)在數(shù)據(jù)庫(kù)中,在對(duì)網(wǎng)站中網(wǎng)頁(yè)的多次請(qǐng)求中使用。
總結(jié)
ASP.NET中的功能和工具比ASP中更多,使我們能夠更有效和高效地管理網(wǎng)頁(yè)的狀態(tài)。具體選擇哪種方法與你的應(yīng)用程序有關(guān),在選擇時(shí)可以考慮下面的問(wèn)題:
·需要存儲(chǔ)多少信息?
·客戶(hù)端接受持久的還是內(nèi)存中的cookie?
·希望在客戶(hù)端還是在服務(wù)器端存儲(chǔ)信?
·要存儲(chǔ)的信息需要保密嗎?
·希望你的網(wǎng)頁(yè)的性能如何?
分享:數(shù)據(jù)訪(fǎng)問(wèn)層的第一種實(shí)現(xiàn):Access SQL經(jīng)過(guò)上面篇文章的介紹,整個(gè)系統(tǒng)的框架算是基本搭建完了,下面,我們要具體實(shí)現(xiàn)各個(gè)層次。關(guān)于數(shù)據(jù)訪(fǎng)問(wèn)層的實(shí)現(xiàn),我準(zhǔn)備討論三種實(shí)現(xiàn)方式,這一篇文章討論第一種:Access 動(dòng)態(tài)生成SQL。 顧名
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶(hù)端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- 解析linq to xml操作XML的示例分析
- 淺談對(duì)Jquery+JSON+WebService的使用小結(jié)
- ASP.NET中常用的26個(gè)優(yōu)化性能方法
- Asp.Net中動(dòng)態(tài)頁(yè)面轉(zhuǎn)靜態(tài)頁(yè)面
- .NET 線(xiàn)程基礎(chǔ)的使用介紹
- 利用緩沖技術(shù)提高JSP程序的性能和穩(wěn)定性
- asp.net ajax 使用updatepanel進(jìn)行更新后的提示
- ASP.Net常用功能整理--生成圖片的縮略圖
- ASP.NET中“找不到指定模塊”的解決辦法
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-ASP.NET中的狀態(tài)管理。