詳解ASP.NET中Session的用法
來源:易賢網(wǎng) 閱讀:1062 次 日期:2016-08-09 14:37:32
溫馨提示:易賢網(wǎng)小編為您整理了“詳解ASP.NET中Session的用法”,方便廣大網(wǎng)友查閱!

當(dāng)用戶在應(yīng)用程序的頁之間跳轉(zhuǎn)時(shí),存儲(chǔ)在 Session 對(duì)象中的變量不會(huì)清除,而用戶在應(yīng)用程序中訪問頁面時(shí),這些變量始終存在。當(dāng)用戶請(qǐng)求來自應(yīng)用程序的 Web 頁時(shí),如果該用戶還沒有會(huì)話,則 Web 服務(wù)器將自動(dòng)創(chuàng)建一個(gè) Session 對(duì)象。當(dāng)會(huì)話過期或被放棄后,服務(wù)器將終止該會(huì)話。

通過向客戶程序發(fā)送唯一的 Cookie 可以管理服務(wù)器上的 Session 對(duì)象。當(dāng)用戶第一次請(qǐng)求 ASP 應(yīng)用程序中的某個(gè)頁面時(shí),ASP 要檢查 HTTP 頭信息,查看是否有在報(bào)文中有名為 ASPSESSIONID 的 Cookie 發(fā)送過來,如果有,則服務(wù)器會(huì)啟動(dòng)新的會(huì)話,并為該會(huì)話生成一個(gè)全局唯一的值,在把這個(gè)值作為新 ASPSESSIONID Cookie 的值發(fā)送給客戶端,正是使用這種 Cookie,可以訪問存儲(chǔ)在服務(wù)器上的屬于客戶程序的信息。Session 對(duì)象最常見的作用就是存儲(chǔ)用戶的首選項(xiàng)。例如,如果用戶指明不喜歡查看圖形,就可以將該信息存儲(chǔ)在 Session 對(duì)象中。另外其還經(jīng)常被用在鑒別客戶身份的程序中。要注意的是,會(huì)話狀態(tài)僅在支持 cookie 的瀏覽器中保留,如果客戶關(guān)閉了 Cookie 選項(xiàng),Session 也就不能發(fā)揮作用了。

(一)Session的基本屬性:

一、屬性

1、SessionID

SessionID 屬性返回用戶的會(huì)話標(biāo)識(shí)。在創(chuàng)建會(huì)話時(shí),服務(wù)器會(huì)為每一個(gè)會(huì)話生成一個(gè)單獨(dú)的標(biāo)識(shí)。會(huì)話標(biāo)識(shí)以長(zhǎng)整形數(shù)據(jù)類型返回。在很多情況下 SessionID 可以用于 WEB 頁面注冊(cè)統(tǒng)計(jì)。

2、TimeOut

Timeout 屬性以分鐘為單位為該應(yīng)用程序的 Session 對(duì)象指定超時(shí)時(shí)限。如果用戶在該超時(shí)時(shí)限之內(nèi)不刷新或請(qǐng)求網(wǎng)頁,則該會(huì)話將終止。

二、方法

Session 對(duì)象僅有一個(gè)方法,就是 Abandon,Abandon 方法刪除所有存儲(chǔ)在 Session 對(duì)象中的對(duì)象并釋放這些對(duì)象的源。如果您未明確地調(diào)用 Abandon 方法,一旦會(huì)話超時(shí),服務(wù)器將刪除這些對(duì)象。當(dāng)服務(wù)器處理完當(dāng)前頁時(shí),下面示例將釋放會(huì)話狀態(tài)。

< % Session.Abandon %>

三、事件

Session 對(duì)象有兩個(gè)事件可用于在 Session 對(duì)象啟動(dòng)和釋放是運(yùn)行過程。

1、Session_OnStart 事件在服務(wù)器創(chuàng)建新會(huì)話時(shí)發(fā)生。服務(wù)器在執(zhí)行請(qǐng)求的頁之前先處理該腳本。Session_OnStart 事件是設(shè)置會(huì)話期變量的最佳時(shí)機(jī),因?yàn)樵谠L問任何頁之前都會(huì)先設(shè)置它們。

盡管在 Session_OnStart 事件包含 Redirect 或 End 方法調(diào)用的情況下 Session 對(duì)象仍會(huì)保持,然而服務(wù)器將停止處理 Global.asa 文件并觸發(fā) Session_OnStart 事件的文件中的腳本。

為了確保用戶在打開某個(gè)特定的 Web 頁時(shí)始終啟動(dòng)一個(gè)會(huì)話,就可以在 Session_OnStart 事件中調(diào)用 Redirect 方法。當(dāng)用戶進(jìn)入應(yīng)用程序時(shí),服務(wù)器將為用戶創(chuàng)建一個(gè)會(huì)話并處理 Session_OnStart 事件腳本。您可以將腳本包含在該事件中以便檢查用戶打開的頁是不是啟動(dòng)頁,如果不是,就指示用戶調(diào)用 Response.Redirect 方法啟動(dòng)網(wǎng)頁。程序如下 :

< SCRIPT RUNAT=Server Language=VBScript>

Sub Session_OnStart

startPage = "/MyApp/StartHere.asp"

currentPage = Request.ServerVariables("SCRIPT_NAME")

if strcomp(currentPage,startPage,1) then

Response.Redirect(startPage)

end if

End Sub

< /SCRIPT>

上述程序只能在支持 cookie 的瀏覽器中運(yùn)行。因?yàn)椴恢С?cookie 的瀏覽器不能返回 SessionID cookie,所以,每當(dāng)用戶請(qǐng)求 Web 頁時(shí),服務(wù)器都會(huì)創(chuàng)建一個(gè)新會(huì)話。這樣,對(duì)于每個(gè)請(qǐng)求服務(wù)器都將處理 Session_OnStart 腳本并將用戶重定向到啟動(dòng)頁中。

2、Session_OnEnd 事件在會(huì)話被放棄或超時(shí)發(fā)生。

關(guān)于使用 Session 對(duì)象需要注意的事項(xiàng) Application 對(duì)象相近,請(qǐng)參照前文。

會(huì)話可以通過以下三種方式啟動(dòng) :

1)、一個(gè)新用戶請(qǐng)求訪問一個(gè) URL,該 URL 標(biāo)識(shí)了某個(gè)應(yīng)用程序中的 .asp 文件,并且該應(yīng)用程序的 Global.asa 文件包含 Session_OnStart 過程。

2)、用戶在 Session 對(duì)象中存儲(chǔ)了一個(gè)值。

3)、用戶請(qǐng)求了一個(gè)應(yīng)用程序的 .asp 文件,并且該應(yīng)用程序的Global.asa 文件使用 < OBJECT> 標(biāo)簽創(chuàng)建帶有會(huì)話作用域的對(duì)象的實(shí)例。

如果用戶在指定時(shí)間內(nèi)沒有請(qǐng)求或刷新應(yīng)用程序中的任何頁,會(huì)話將自動(dòng)結(jié)束。這段時(shí)間的默認(rèn)值是 20 分鐘??梢酝ㄟ^在 Internet 服務(wù)管理器中設(shè)置“應(yīng)用程序選項(xiàng)”屬性頁中的“會(huì)話超時(shí)”屬性改變應(yīng)用程序的默認(rèn)超時(shí)限制設(shè)置。應(yīng)依據(jù)您的 Web 應(yīng)用程序的要求和服務(wù)器的內(nèi)存空間來設(shè)置此值。例如,如果您希望瀏覽您的 Web 應(yīng)用程序的用戶在每一頁僅停留幾分鐘,就應(yīng)該縮短會(huì)話的默認(rèn)超時(shí)值。過長(zhǎng)的會(huì)話超時(shí)值將導(dǎo)致打開的會(huì)話過多而耗盡您的服務(wù)器的內(nèi)存資源。對(duì)于一個(gè)特定的會(huì)話,如果您想設(shè)置一個(gè)小于默認(rèn)超時(shí)值的超時(shí)值,可以設(shè)置 Session 對(duì)象的 Timeout 屬性。例如,下面這段腳本將超時(shí)值設(shè)置為 5 分鐘。

< % Session.Timeout = 5 %>

當(dāng)然你也可以設(shè)置一個(gè)大于默認(rèn)設(shè)置的超時(shí)值,Session.Timeout 屬性決定超時(shí)值。你還可以通過 Session 對(duì)象的 Abandon 方法顯式結(jié)束一個(gè)會(huì)話。例如,在表格中提供一個(gè)“退出”按鈕,將按鈕的 ACTION 參數(shù)設(shè)置為包含下列命令的 .asp 文件的 URL。

< % Session.Abandon %>

(二)Session的用法:

一、使用Session設(shè)定權(quán)限

Session簡(jiǎn)介:

簡(jiǎn)單來說就是服務(wù)器給客戶端的一個(gè)編號(hào)。當(dāng)一臺(tái)WWW服務(wù)器運(yùn)行時(shí),可能有若干個(gè)用戶瀏覽正在運(yùn)正在這臺(tái)服務(wù)器上的網(wǎng)站。當(dāng)每個(gè)用戶首次與這臺(tái)WWW服務(wù)器建立連接時(shí),他就與這個(gè)服務(wù)器建立了一個(gè)Session,同時(shí)服務(wù)器會(huì)自動(dòng)為其分配一個(gè)SessionID,用以標(biāo)識(shí)這個(gè)用戶的唯一身份。這個(gè)SessionID是由WWW服務(wù)器隨機(jī)產(chǎn)生的一個(gè)由24個(gè)字符組成的字符串。

-Session的初次使用:

protected void Page_Load(object sender, EventArgs e)

{//這是頁面的初始化

  if (!Page.IsPostBack)

  {//判斷是否為初次執(zhí)行

   if (Object.Equals(Session["AdminName"], null))

   {//判斷在Session["AdminName"]是否存在值

    Response.Redirect("ErrorPage.aspx", true);

   }

   else

   {//要是存在則記錄下這個(gè)人的用戶名

   Name.Text = Session["AdminName"].ToString();

   }

  }

}

二、進(jìn)行頁面?zhèn)髦?/P>

在頁面之間傳遞信息有許多方式:

第一:可以使用QueryString

第二:可以使用Session

第三:Server.Transfer

這三種傳值方式都有利有弊,下面我以我的經(jīng)驗(yàn)給大家講解一下

首先:QueryString

QueryString是一種非常簡(jiǎn)單的傳值方式,其缺點(diǎn)就是會(huì)把要傳遞的值顯示在瀏覽器的地址欄中,并且此方法不能夠傳遞對(duì)象。如果你想傳遞一個(gè)安全性不是那么重要或者是一個(gè)簡(jiǎn)單的數(shù)值時(shí)。使用此方式最好不過。

下面通過一個(gè)小例子來說明一下

1.創(chuàng)建一個(gè)Web頁面,叫SendMessage.aspx

2.在頁面內(nèi)添加兩個(gè)TextBox,叫TxtName,TxtEmail,與一個(gè)Button,叫Submit

protected void Submit_Click(object sender, EventArgs e)

{

 String Url = "ReceiveMessage.aspx?Name=" +

 TxtName.Text + "&Email=" + TxtEmail.Text;

 Response.Redirect(Url);

}

3.再創(chuàng)建一個(gè)接收信息頁面,叫ReceiveMessage.aspx

4.在頁面內(nèi)添加兩個(gè)Label,叫LbName,LbEmail

protected void Page_Load(object sender, EventArgs e)

{//使用Request來接收由上個(gè)頁面?zhèn)鬟f過來的值,分別顯示在頁面上

 LbName.Text = Request.QueryString["Name"];

 LbEmail.Text = Request.QueryString["Email"];

}

-再次:使用Session變量

使用Session變量傳值是一種最常見的方式了,此種方式不僅可以把值傳遞到下一個(gè)頁面,還可以交叉?zhèn)鬟f到多個(gè)頁面,直至把Session變量的值Remove后,才消失

下面舉例說明

1.創(chuàng)建一個(gè)頁面,叫SendSession

2.在頁面內(nèi)添加兩個(gè)TextBox,叫TxtName,TxtEmail,添加一個(gè)Button,叫Submit

protected void Submit_Click(object sender, EventArgs e)

{//可以使用Session的Add方法

 Session["Name"] = TxtName.Text;

 //可以使用Session.Add("Name",TxtName.Text);

 Session["Email"] = TxtEmail.Text;

 //可以使用Session.Add("Email",TxtEmail.Text);

 Response.Redirect("ReceiveMessage.aspx");

}

3.再創(chuàng)建一個(gè)頁面,叫ReceiveMessage.aspx

4.在頁面內(nèi)添加兩個(gè)Label,叫LbName,LbEmail

protected void Page_Load(object sender, EventArgs e)

{

 LbName.Text = Session["Name"].ToString();

 LbEmail.Text = Session["Email"].ToString();

 Session["Name"].Remove();

 Session["Email"].Remove();

 //使用結(jié)束要清除Session中的值

}

這是使用Session傳遞數(shù)值,此方式耗費(fèi)服務(wù)器的資源,盡量少使用

-再次:使用Server.Transfer

這種傳遞方式有點(diǎn)復(fù)雜,但也可以是一種值傳遞方式

下面舉例說明一下:

1.創(chuàng)建一個(gè)頁面,叫SendMessage.aspx

2.在頁面內(nèi)添加兩個(gè)TextBox,叫TxtName,TxtEmail,添加一個(gè)Button,叫Submit

protected void Submit_Click(object sender, EventArgs e)

 {

  Server.Transfer("ReceiveMessage.aspx");

 }

//再添加一個(gè)屬性

 public String Name

 {

  Get

  {

   return TxtName.Text;

  }

 }

 public String Email

 {

  Get

  {

   return TxtEmail.Text;

  }

 }

3.再創(chuàng)建一個(gè)頁面,叫ReceiveMessage.aspx

4.在頁面放兩個(gè)Label,叫LbName,LbEmail

protected void Page_Load(object sender, EventArgs e)

{

 //創(chuàng)建原始窗體的實(shí)例SendMessage wf1

 //獲得實(shí)例化的句柄

 wf1=(SendMessage)Context.Handler;

 Label1.Text=wf1.Name;

 Label2.Text=wf1.EMail;

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)理解ASP.NET中Session的用法有所幫助。

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:詳解ASP.NET中Session的用法
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)