成功開發 Web 應用程序的難題之一是在一次用戶訪問,即會話期間,當用戶在一個應用程序的頁與頁之間跳轉的同時,維護用戶信息。HTTP 是一種無狀態協議,也就是說,Web 服務器將某頁的每次訪問都當作相互無關的訪問來處理;服務器不保留前一次訪問的任何信息,即使訪問就發生在當前訪問的幾秒鐘之前。正因為這種不記憶以前訪問的特性使得編寫聯機目錄之類的應用程序很困難,此類應用程序可能需要跟蹤用戶在目錄的不同頁間跳轉的同時曾選擇過的目錄項。
asp 提供了一個管理會話信息問題的獨特方案。使用 ASP session 對象和由您的服務器生成的特殊用戶 ID,您可以創建一個智能應用程序,該應用程序可以識別每個來訪的用戶并收集應用程序跟蹤用戶的首選項或選擇內容所要用到的信息。
ASP 通過 HTTP cookie 設置用戶 ID。HTTP cookie 是存儲在用戶瀏覽器上的小文件。因此,如果您正在為不支持 cookie 的瀏覽器創建應用程序,或者您的客戶將瀏覽器設置為不接受 cookie,請不要使用 ASP 的會話管理功能。
您也可以編寫在應用程序啟動或結束時運行的腳本。
啟動和結束會話 會話可以通過三種方式啟動:
一個新用戶請求訪問一個 URL,該 URL 標識了某個應用程序中的 .asp 文件,并且該應用程序的 Global.asa 文件包含 Session_OnStart 過程。 用戶在 Session 對象中存儲了一個值。 用戶請求了一個應用程序的 .asp 文件,并且該應用程序的 Global.asa 文件使用 <OBJECT> 標簽創建帶有會話作用域的對象的實例。 如果用戶在指定時間內沒有請求或刷新應用程序中的任何頁,會話將自動結束。這段時間的默認值是 20 分鐘。可以通過在 Internet 服務管理器中設置“應用程序選項”屬性頁中的“會話超時”屬性改變應用程序的默認超時限制設置。應依據您的 Web 應用程序的要求和服務器的內存空間來設置此值。例如,如果您希望瀏覽您的 Web 應用程序的用戶在每一頁僅停留幾分鐘,就應該縮短會話的默認超時值。過長的會話超時值將導致打開的會話過多而耗盡您的服務器的內存資源。
<% If Session("ScreenResolution") = "Low" Then %> This is the text version of the page. <% Else %> This is the multimedia version of the page. <% End If %> 您也可以在 Session 對象中存儲一個對象實例,但這樣做會影響服務器的性能。
管理 Web Farm 的會話 ASP 會話信息存儲在 Web 服務器中。瀏覽器必須向 Web 服務器請求頁才能獲得用來訪問會話信息的腳本。在 Web Farm(其中許多 Web 服務器共同承擔響應用戶申請的責任)中,用戶的請求并不總是被路由到同一個服務器,而是由一個被稱為“負載平衡”進程的特殊軟件對此 URL 站點的申請分配任意一個空閑的服務器。負載平衡進程使在 Web Farm 中保存會話信息變得更加困難。
為了在一個負載被平衡的站點上使用 ASP 會話管理,必須保證用戶會話的所有請求都被定向到同一個 Web 服務器。一種做法是編寫一個 Session_OnStart 過程,此過程使用 Response 對象將瀏覽器重定向到運行該用戶會話的 Web 服務器。如果在您的應用程序頁中的所有鏈接都是相對的,那么以后對某一頁的所有請求都將被路由到同一個服務器。
使用 Cookie cookie 是 Web 服務器嵌在用戶的 Web 瀏覽器中,用來代表用戶的令牌。當下次同一瀏覽器請求一頁時,它將發送從 Web 服務器收到的 cookie。 cookie 允許有一組信息與用戶關聯。 ASP 腳本使用 Response 和 Request 對象的 Cookies 集合,可以獲取和設置 cookie 的值。