當使用者在應用程式的頁之間跳轉時,儲存在 Session 對象中的變數不會清除,而使用者在應用程式中訪問頁面時,這些變數始終存在。當使用者請求來自應用程式的 Web 頁時,如果該使用者還沒有會話,則 Web 服務器將自動建立一個 Session 對象。當會話到期或被放棄後,伺服器將終止該會話。
通過向客戶程式發送唯一的 Cookie 可以管理伺服器上的 Session 對象。當使用者第一次請求 ASP 應用程式中的某個頁面時,ASP 要檢查 HTTP 頭資訊,查看是否有在報文中有名為 ASPSESSIONID 的 Cookie 發送過來,如果有,則伺服器會啟動新的會話,並為該會話產生一個全域唯一的值,在把這個值作為新 ASPSESSIONID Cookie 的值發送給用戶端,正是使用這種 Cookie,可以訪問儲存在伺服器上的屬於客戶程式的資訊。Session 對象最常見的作用就是儲存使用者的喜好設定。例如,如果使用者指明不喜歡查看圖形,就可以將該資訊儲存在 Session 對象中。另外其還經常被用在鑒別客戶身份的程式中。要注意的是,工作階段狀態僅在支援 cookie 的瀏覽器中保留,如果客戶關閉了 Cookie 選項,Session 也就不能發揮作用了。
(一)Session的基本屬性:
一、屬性
1、SessionID
SessionID 屬性返回使用者的會話標識。在建立會話時,伺服器會為每一個會話產生一個單獨的標識。會話標識以長整形資料類型返回。在很多情況下 SessionID 可以用於 WEB 頁面註冊統計。
2、TimeOut
Timeout 屬性以分鐘為單位為該應用程式的 Session 對象指定逾時時限。如果使用者在該逾時時限之內不重新整理或請求網頁,則該會話將終止。
二、方法
Session 對象僅有一個方法,就是 Abandon,Abandon 方法刪除所有儲存在 Session 對象中的對象並釋放這些對象的源。如果您未明確地調用 Abandon 方法,一旦會話逾時,伺服器將刪除這些對象。當伺服器處理完當前頁時,下面樣本將釋放工作階段狀態。
< % Session.Abandon %>
三、事件
Session 對象有兩個事件可用於在 Session 對象啟動和釋放是運行過程。
1、Session_OnStart 事件在伺服器建立新會話時發生。伺服器在執行請求的頁之前先處理該指令碼。Session_OnStart 事件是設定會話期變數的最佳時機,因為在訪問任何頁之前都會先設定它們。
儘管在 Session_OnStart 事件包含 Redirect 或 End 方法調用的情況下 Session 對象仍會保持,然而伺服器將停止處理 Global.asa 檔案並觸發 Session_OnStart 事件的檔案中的指令碼。
為了確保使用者在開啟某個特定的 Web 頁時始終啟動一個會話,就可以在 Session_OnStart 事件中調用 Redirect 方法。當使用者進入應用程式時,伺服器將為使用者建立一個會話並處理 Session_OnStart 事件指令碼。您可以將指令碼包含在該事件中以便檢查使用者開啟的頁是不是啟動頁,如果不是,就指示使用者調用 Response.Redirect 方法啟動網頁。程式如下 :
< SCRIPT RUNAT=Server Language=VBScript>Sub Session_OnStartstartPage = "/MyApp/StartHere.asp"currentPage = Request.ServerVariables("SCRIPT_NAME")if strcomp(currentPage,startPage,1) thenResponse.Redirect(startPage)end ifEnd Sub< /SCRIPT>
上述程式只能在支援 cookie 的瀏覽器中運行。因為不支援 cookie 的瀏覽器不能返回 SessionID cookie,所以,每當使用者請求 Web 頁時,伺服器都會建立一個新會話。這樣,對於每個請求伺服器都將處理 Session_OnStart 指令碼並將使用者重新導向到啟動頁中。
2、Session_OnEnd 事件在會話被放棄或逾時發生。
關於使用 Session 對象需要注意的事項 Application 對象相近,請參照前文。
會話可以通過以下三種方式啟動 :
1)、一個新使用者請求訪問一個 URL,該 URL 標識了某個應用程式中的 .asp 檔案,並且該應用程式的 Global.asa 檔案包含 Session_OnStart 過程。
2)、使用者在 Session 對象中儲存了一個值。
3)、使用者請求了一個應用程式的 .asp 檔案,並且該應用程式的Global.asa 檔案使用 < OBJECT> 標籤建立帶有會話範圍的對象的執行個體。
如果使用者在指定時間內沒有請求或重新整理應用程式中的任何頁,會話將自動結束。這段時間的預設值是 20 分鐘。可以通過在 網際網路服務管理員中設定“應用程式選項”屬性頁面中的“會話逾時”屬性改變應用程式的預設逾時限制設定。應依據您的 Web 應用程式的要求和伺服器的記憶體空間來設定此值。例如,如果您希望瀏覽您的 Web 應用程式的使用者在每一頁僅停留幾分鐘,就應該縮短會話的預設逾時值。過長的會話逾時值將導致開啟的會話過多而耗盡您的伺服器的記憶體資源。對於一個特定的會話,如果您想設定一個小於預設逾時值的逾時值,可以設定 Session 對象的 Timeout 屬性。例如,下面這段指令碼將逾時值設定為 5 分鐘。
< % Session.Timeout = 5 %>
當然你也可以設定一個大於預設設定的逾時值,Session.Timeout 屬性決定逾時值。你還可以通過 Session 對象的 Abandon 方法顯式結束一個會話。例如,在表格中提供一個“退出”按鈕,將按鈕的 ACTION 參數設定為包含下列命令的 .asp 檔案的 URL。
< % Session.Abandon %>
(二)Session的用法:
一、使用Session設定許可權
Session簡介:
簡單來說就是伺服器給用戶端的一個編號。當一台WWW伺服器運行時,可能有若干個使用者瀏覽正在運正在這台伺服器上的網站。當每個使用者首次與這台WWW伺服器建立串連時,他就與這個伺服器建立了一個Session,同時伺服器會自動為其分配一個SessionID,用以標識這個使用者的唯一身份。這個SessionID是由WWW伺服器隨機產生的一個由24個字元組成的字串。
-Session的初次使用:
protected void Page_Load(object sender, EventArgs e){//這是頁面的初始化 if (!Page.IsPostBack) {//判斷是否為初次執行 if (Object.Equals(Session["AdminName"], null)) {//判斷在Session["AdminName"]是否存在值 Response.Redirect("ErrorPage.aspx", true); } else {//要是存在則記錄下這個人的使用者名稱 Name.Text = Session["AdminName"].ToString(); } }}
二、進行頁面傳值
在頁面之間傳遞資訊有許多方式:
第一:可以使用QueryString
第二:可以使用Session
第三:Server.Transfer
這三種傳值方式都有利有弊,下面我以我的經驗給大家講解一下
首先:QueryString
QueryString是一種非常簡單的傳值方式,其缺點就是會把要傳遞的值顯示在瀏覽器的地址欄中,並且此方法不能夠傳遞對象。如果你想傳遞一個安全性不是那麼重要或者是一個簡單的數值時。使用此方式最好不過。
下面通過一個小例子來說明一下
1.建立一個Web頁面,叫SendMessage.aspx
2.在頁面內添加兩個TextBox,叫TxtName,TxtEmail,與一個Button,叫Submit
protected void Submit_Click(object sender, EventArgs e) { String Url = "ReceiveMessage.aspx?Name=" + TxtName.Text + "&Email=" + TxtEmail.Text; Response.Redirect(Url); }
3.再建立一個接收資訊頁面,叫ReceiveMessage.aspx
4.在頁面內添加兩個Label,叫LbName,LbEmail
protected void Page_Load(object sender, EventArgs e) {//使用Request來接收由上個頁面傳遞過來的值,分別顯示在頁面上 LbName.Text = Request.QueryString["Name"]; LbEmail.Text = Request.QueryString["Email"]; }
-再次:使用Session變數
使用Session變數傳值是一種最常見的方式了,此種方式不僅可以把值傳遞到下一個頁面,還可以交叉傳遞到多個頁面,直至把Session變數的值Remove後,才消失
下面舉例說明
1.建立一個頁面,叫SendSession
2.在頁面內添加兩個TextBox,叫TxtName,TxtEmail,添加一個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.再建立一個頁面,叫ReceiveMessage.aspx
4.在頁面內添加兩個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(); //使用結束要清除Session中的值 }
這是使用Session傳遞數值,此方式耗費伺服器的資源,盡量少使用
-再次:使用Server.Transfer
這種傳遞方式有點複雜,但也可以是一種值傳遞方式
下面舉例說明一下:
1.建立一個頁面,叫SendMessage.aspx
2.在頁面內添加兩個TextBox,叫TxtName,TxtEmail,添加一個Button,叫Submit
protected void Submit_Click(object sender, EventArgs e) { Server.Transfer("ReceiveMessage.aspx"); }//再添加一個屬性 public String Name { Get { return TxtName.Text; } } public String Email { Get { return TxtEmail.Text; } }
3.再建立一個頁面,叫ReceiveMessage.aspx
4.在頁面放兩個Label,叫LbName,LbEmail
protected void Page_Load(object sender, EventArgs e) { //建立原始表單的執行個體SendMessage wf1 //獲得執行個體化的控制代碼 wf1=(SendMessage)Context.Handler; Label1.Text=wf1.Name; Label2.Text=wf1.EMail; }
以上就是本文的全部內容,希望對大家學習理解ASP.NET中Session的用法有所協助。