關鍵詞:Web服務器 數據庫 會話管理
1 Web服務中會話概念的產生
Cookie是Web服務器發送給Web浏覽器的體積很小的純文本信息,以文本文件的形式存放在用戶的計算機中,這些Cookie一般用於保存用戶的訪問狀態,當用戶再次訪問同一個網站時會將這些Cookie信息發送回服務器,使得服務器能夠恢復用戶上一次的訪問狀態。使用Cookie的根本目的是為了在用戶訪問期間實現不同頁面之間的數據傳輸,以解決HTTP無狀態的問題。Cookie技術能夠增強網站的服務功能,為用戶帶來方便。但是Cookie還有許多限制和不足,如每台用戶計算機一般只允許存放300個Cookie,同一個Web服務器只能發送20個Cookie等。
針對Cookie技術的局限性,美國微軟公司首先提出了會話(Session)的概念[1],並將會話技術集成在ASP(動態服務器網頁)語言中。會話是指用戶訪問Web服務器期間存放在Web服務器上的所有與用戶訪問狀態有關的信息。每次新創建的會話都有一個唯一的標識串,稱為會話ID,會話ID被保存在Web服務器中,其它會話信息都在會話ID的索引下進行保存和讀取。一次會話從創建到被刪除的時間稱為會話生存期,會話生存期的長短由會話管理機制決定。Cookie與會話的不同之處在於:Cookie將用戶訪問的狀態信息通過Web浏覽器存放在用戶計算機中,而會話通過會話管理機制存放在Web服務器中。
2 會話管理機制
會話的優勢是它可以保存在Web服務器的內存、文件或數據庫中,這樣就有三種會話管理機制:基於內存的會話管理、基於文件的會話管理和基於數據庫的會話管理。
基於內存的會話管理是運行速度最快的一種機制,它一般在Web服務器的內存中專門開辟一塊共享內存區域,在這片內存區域中可直接快速地存取會話信息。這種機制對Web服務器的系統配置要求較高,需要系統資源能夠負載較高的訪問量,否則不僅不能提高訪問速度,相反地還會因系統資源不足造成服務器負載過重。
基於文件的會話管理是使用最廣泛的一種機制,會話信息一般以文本文件的形式存放在Web服務器的硬盤中。這種機制易於實現,對服務器的系統配置要求不高,但是存放會話信息的文件之間缺乏邏輯聯系,當並發的訪問量很大時會話管理的文件數目將增長很快,這不僅大大增加設計會話管理機制的難度,也會相應地影響存取會話信息的速度。
基於數據庫的會話管理是最容易擴展的一種機制,它需要Web服務器有一個網絡數據庫系統支撐,會話信息全部存放在網絡數據庫中,在數據庫系統的支持下會話管理可以充分利用數據庫具有的事務處理、安全存取和數據完整性檢驗等機制,有效地管理所有的會話信息。會話信息在數據庫中相互之間很容易建立起邏輯聯系,設計出統一快速的存取方法。這種機制特別適用於訪問量很大的大中型Web網站。
以上三種會話管理機制具有各自的特點和優勢,其比較見表1:
表1 基於內存、文件和數據庫的三種會話管理機制的比較 3 基於數據庫的會話管理的實現
本文下面將給出用PHP語言實現的一個基於數據庫的會話管理機制[2],這個會話管理機制采用RedHat7.2 Linux操作系統平台,Apache1.3.20 Web服務器程序,PostgreSQL7.0網絡數據庫。本機制可根據用戶的需要進行修改和擴展,另外程序中使用了PHP語言的PEAR對象模塊庫,利用PEAR內的DB模塊可實現數據庫類型無關性操作[3],也就是說用戶的網絡數據庫可選擇Linux操作系統支持的其它數據庫,如MySQL、Oracle、SyBase、Informix和MiniSQL等數據庫。實現代碼如下:
1.創建數據庫和表
CREATE DATABASE sessions CREATE TABLE sessions ( sesskey char(32) PRIMARY KEY, expiry int NOT NULL, alue text NOT NULL)
2.PHP語言實現的會話管理機制