當(dāng)前位置: 首頁IT技術(shù) → 對ASP內(nèi)置對象Application詳細(xì)說明(第二篇)

對ASP內(nèi)置對象Application詳細(xì)說明(第二篇)

更多

 本文是關(guān)于ASP內(nèi)置對象Application的解說的第二篇,希望能給大家?guī)韼椭?/p>

這是因?yàn)?Application 對象是作為集合被實(shí)現(xiàn)的。數(shù)組元素 StoredArray(3) 未獲得新的賦值。而此值將包含在 Application 對象集合中,并將覆蓋此位置以前存儲的任何信息。建議您在將數(shù)組存儲在 Application 對象中時(shí),在檢索或改變數(shù)組中的對象前獲取數(shù)組的一個(gè)副本。在對數(shù)組操作時(shí),您應(yīng)再將數(shù)組全部存儲在 Application 對象中,這樣您所做的任何改動將被存儲下來。下列的腳本對此進(jìn)行演示。

  ---asp8a.asp---

  < %
  dim MyArray()
  Redim MyArray(5)
  MyArray(0)="hello"
  MyArray(1)="some other string"
  Application.Lock
  Application("StoredArray")=MyArray
  Application.Unlock
  Response.Redirect "asp8b.asp"
  %>

  ---asp8b.asp---

  < %
  LocalArray=Application("StoredArray")
  LocalArray(1)=" there"
  Response.Write LocalArray(0)&LocalArray(1)
  Application.Lock
  Application("StoredArray")=LocalArray
  Application.Unlock
  %>

  與 Application 對象具有相近作用的另一個(gè)非常實(shí)用的 ASP 內(nèi)建對象就是 Session。我們可以使用 Session 對象存儲特定的用戶會話所需的信息。當(dāng)用戶在應(yīng)用程序的頁之間跳轉(zhuǎn)時(shí),存儲在 Session 對象中的變量不會清除,而用戶在應(yīng)用程序中訪問頁面時(shí),這些變量始終存在。當(dāng)用戶請求來自應(yīng)用程序的 Web 頁時(shí),如果該用戶還沒有會話,則 Web 服務(wù)器將自動創(chuàng)建一個(gè) Session 對象。當(dāng)會話過期或被放棄后,服務(wù)器將終止該會話。

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

  一、屬性 

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

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

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

< % Session.Abandon %>

  三、事件

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

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

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

  為了確保用戶在打開某個(gè)特定的 Web 頁時(shí)始終啟動一個(gè)會話,就可以在 Session_OnStart 事件中調(diào)用 Redirect 方法。當(dāng)用戶進(jìn)入應(yīng)用程序時(shí),服務(wù)器將為用戶創(chuàng)建一個(gè)會話并處理 Session_OnStart 事件腳本。您可以將腳本包含在該事件中以便檢查用戶打開的頁是不是啟動頁,如果不是,就指示用戶調(diào)用 Response.Redirect 方法啟動網(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)用戶請求 Web 頁時(shí),服務(wù)器都會創(chuàng)建一個(gè)新會話。這樣,對于每個(gè)請求服務(wù)器都將處理 Session_OnStart 腳本并將用戶重定向到啟動頁中。

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

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

  會話可以通過以下三種方式啟動 :

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

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

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

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

< % Session.Timeout = 5 %>

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

< % Session.Abandon %>

熱門評論
最新評論
發(fā)表評論 查看所有評論(0)
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)