JAVAEE 第三週

Session:在計算機中,尤爲是在網絡應用中,稱爲「會話控制」。Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。當用戶請求來自應用程序的 Web 頁時,若是該用戶尚未會話,則 Web 服務器將自動建立一個 Session 對象。當會話過時或被放棄後,服務器將終止該會話。Session 對象最多見的一個用法就是存儲用戶的首選項。例如,若是用戶指明不喜歡查看圖形,就能夠將該信息存儲在 Session 對象中。有關使用 Session 對象的詳細信息,請參閱「ASP 應用程序」部分的「管理會話」。注意 會話狀態僅在支持 cookie 的瀏覽器中保留。php

基本定義

Session直接翻譯成中文比較困難,通常都譯成時域。在計算機專業術語中,Session是指一個終端用戶與交互系統進行通訊的時間間隔,一般指從註冊進入系統到註銷退出系統之間所通過的時間。以及若是須要的話,可能還有必定的操做空間。
具體到Web中的Session指的就是用戶在瀏覽某個網站時,從進入網站到關閉瀏覽器所通過的這段時間,也就是用戶瀏覽這個網站所花費的時間。所以從上述的定義中咱們能夠看到,Session其實是一個特定的時間概念。
須要注意的是,一個Session的概念須要包括特定的客戶端,特定的 服務器端以及不中斷的操做時間。A用戶和C服務器創建鏈接時所處的Session同B用戶和C服務器創建鏈接時所處的Session是兩個不一樣的Session。
session的工做原理
(1)當一個session第一次被啓用時,一個惟一的標識被存儲於本地的cookie中。
(2)首先使用session_start()函數, PHP從session倉庫中加載已經存儲的session變量。
(3)當執行PHP腳本時,經過使用session_register()函數註冊session變量。
(4)當PHP腳本執行結束時,未被銷燬的session變量會被自動保存在本地必定路徑下的session庫中,這個路徑能夠經過php.ini文件中的session.save_path指定,下次瀏覽網頁時能夠加載使用。

解決方案

那什麼是Session的解決方案呢?咱們知道,用戶訪問一個網站時每每須要瀏覽許多網頁。Session的使用在不一樣的語言中的使用方法特色不盡相同。對於一個經過PHP構築的網站來講,用戶在訪問的過程當中須要執行許多的PHP腳本。然而因爲 HTTP協議自身的特色,用戶每執行一個PHP腳本都須要和Web 服務器從新創建鏈接。
又因爲無狀態記憶的特色,這次鏈接沒法獲得上次鏈接的狀態。這樣,用戶在一個PHP腳本中對一個變量進行了賦值操做,而在另一個PHP腳本中卻沒法獲得這個變量的值。例如,用戶在負責登陸的PHP腳本中設置了$user="wind",卻沒法在另外一個PHP腳本中經過調用$user來得到「wind」這個值。也就是說,在一次HTTP請求中,PHP沒法將已經賦值的參數傳遞個下一次http請求的腳本。所以,每一個PHP腳本中所定義的變量都是隻在本次HTTP請求內有效,本次HTTP請求結束,PHP就會釋放掉這些爲這些變量分配的內存。
Session解決方案,就是要提供在PHP腳本中定義全局變量的方法,使得這個全局變量在同一個Session中對於全部的PHP腳本都有效。上面咱們提到了,Session不是一個簡單的時間概念,一個Session中還包括了特定的用戶和 服務器。所以更詳細地講,在一個Session定義的全局變量的做用範圍,是指這個Session所對應的用戶所訪問的全部PHP。
例如A用戶經過Session定義了一個全局變量$user=「wind」中,而B用戶經過Session定義的全局變量$user=「jane」。那麼在A用戶所訪問的PHP腳本中,$user的值就是wind。

使用方法

Session 是 用於保持狀態的基於 Web 服務器的方法。Session 容許經過將對象存儲在 Web服務器的內存中在整個用戶會話過程當中保持任何對象。
Session 一般用於執行如下操做
存儲須要在整個用戶會話過程當中保持其狀態的信息,例如登陸信息或用戶瀏覽 Web應用程序時須要的其它信息。
存儲只須要在頁從新加載過程當中或按功能分組的一組頁之間保持其狀態的對象。
Session 的做用就是它在 Web服務器上保持用戶的 狀態信息供在任什麼時候間從任何設備上的頁面進行訪問。由於瀏覽器不須要存儲任何這種信息,因此可使用任何瀏覽器,即便是像 Pad 或手機這樣的瀏覽器設備。
持久性方法的限制
隨着愈來愈多用戶登陸,Session 所須要的 服務器內存量也會不斷增長。
訪問 Web應用程序的每一個用戶都生成一個單獨的 Session 對象。每一個 Session 對象的持續時間是用戶訪問的時間加上不活動的時間。
若是每一個 Session 中保持許多對象,而且許多用戶同時使用 Web應用程序(建立許多 Session),則用於 Session 持久性的服務器內存量可能會很大,從而影響了可伸縮性。

功能缺陷

目前ASP的開發人員都正在使用Session這一強大的功能,可是在他們使用的過程當中卻發現了ASP Session有如下缺陷:
進程依賴性
ASP Session狀態存於IIS的進程中,也就是 inetinfo.exe這個程序。因此當inetinfo.exe進程崩潰時,這些信息也就丟失。另外,重起或者關閉IIS服務都會形成信息的丟失。
Session狀態使用範圍的侷限性
當一個用戶從一個網站訪問到另一個網站時,這些Session信息並不會隨之遷移過去。例如:新浪網站的WWW 服務器可能不止一個,一個用戶登陸以後要去各個頻道瀏覽,可是每一個頻道都在不一樣的服務器上,若是想在這些WWW服務器共享Session信息怎麼辦呢
Cookie的依賴性
實際上客戶端的Session信息是存儲在Cookie中的,若是客戶端徹底禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。
鑑於ASP Session的以上缺陷,微軟的設計者們在設計開發 ASP .NET Session時進行了相應的改進,徹底克服了以上缺陷,使得ASP .NET Session成爲了一個更增強大的功能。

 

Filter:Filter 技術是servlet 2.3新增長的功能。servlet2.3是sun公司於2000年10月發佈的,它的開發者包括許多我的和公司團體,充分體現了sun公司所倡導的代碼開放性原則。在衆多參與者的共同努力下,servlet2.3比以往功能都強大了許多,並且性能也有了大幅提升。java

特色功能

它新增長的功能包括:
1. 應用程序生命週期事件控制;
2. 新的國際化;
3. 澄清了類的 裝載規則
4. 新的錯誤及安全屬性;
5. 不同意使用HttpUtils 類;
6. 各類有用的方法;
7. 闡明並擴展了幾個servlet DTD;
8. filter功能.

功能介紹

其中最重要的就是filter功能.它使用戶能夠改變一個request和修改一個response. Filter 不是一個servlet,它不能產生一個response,它可以在一個request到達servlet以前 預處理request,也能夠在response離開servlet時處理response.換種說法,filter實際上是一個「servlet chaining「(servlet 鏈).
包括
1. 在servlet被調用以前截獲;
2. 在servlet被調用以前檢查servlet request;
3. 根據須要修改request頭和request數據;
4. 根據須要修改response頭和response數據;
5. 在servlet被調用以後截獲.
你可以配置一個filter 到一個或多個servlet;單個servlet或servlet組可以被多個filter 使用。幾個實用的filter 包括:用戶辨認filter,日誌filter,審覈filter,加密filter,符號filter,能改變xml內容的XSLT filter等。
一個filter必須實現javax.servlet.Filter。
三個方法
1. void setFilterConfig(FilterConfig config) //設置filter 的配置對象;
2. FilterConfig getFilterConfig() //返回filter的配置對象;
3. void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) //執行filter 的工做.
注:現setFilterConfig和getFilterConfig方法已取消,代之爲init(FilterConfig config)和destory()方法。
相關文章
相關標籤/搜索