一、session概述
隱含對象session是javax.servlet.http.HttpSession接口實現類的對象,用於保存用戶的狀態信息。
在web開發中,服務器為每個用戶瀏覽器創建一個會話對象,即session對象。默認情況下,一個瀏覽器獨占一個session對象。因此,在需要保存用戶數據時,服務器程序可以把用戶數據寫到用戶瀏覽器獨占的session中,當用戶使用瀏覽器訪問其他程序時,其他程序可以從用戶的session中取出該用戶的數據,為用戶服務。
session用來分別保存每一個用戶的信息,使用session可以輕易地識別每一個用戶,然后針對每一個用戶的要求,給予正確的響應。在某些應用程序中,服務器需要不斷識別是從哪個客戶端發送來的請求,以便針對用戶的狀態進行相應的處理。因此,網上購物時最常用的就是session,當用戶把物品放入購物車時,就可以將用戶選定的商品信息存放在session中,當需要進行付款等操作時,又可以將session中的信息取出來。
session對象的常用方法:
二、存儲客戶端信息
session對象維護着客戶端用戶和服務器端的狀態,保存着用戶與服務器整個交互過程中的信息,這個對象在用戶關閉瀏覽器或session超時前一直有效。
項目ch04案例:使用seeion對象保存客戶端信息
step1:創建login.jsp
step2:創建session.jsp
step3:創建message.jsp
結果:http://localhost:8080/ch04/login.jsp
三、銷毀session
session對象銷毀后,不可以再調用session對象,否則會報session already invalidate異常。
關閉瀏覽器時,只會使存儲在客戶端瀏覽器中的session cookie失效(即將存儲的屬性值清空),而不會使服務器端的session對象失效。
銷毀isession的三種方式:
(1)通過session對象的invalidate()方法,語法格式為:session.invalidate();
(2)session Id的時間間隔,超過了session的最大有效時間,session就會消失。
(3)服務器進程停止,session失效。
四、session跟蹤---URL重寫
session跟蹤概念:http協議只負責請求與響應,卻並不關心客戶端的請求是否來自相同的客戶端。而在jsp中采用session跟蹤來辨別客戶端。一般session跟蹤有URL重寫、表單隱藏字段、Cookie和HttpSession。
URL重寫:在URL地址后面添加一些數據來標識session,服務器就可以將session和這些數據關聯起來。
優點:即使瀏覽器不支持cookie或用戶禁用了cookie,也可以使用。
缺點:該情況數據長度受限制,容易暴露數據,安全上存在隱患。
項目ch04案例:
創建urlsession.jsp:
結果:http://localhost:8080/ch04/urlsession.jsp
本案例中,通過在URL中添加參數,在JSP頁面中通過request對象的getParameter()方法獲取參數,從而實現session的跟蹤。
五、session跟蹤---表單隱藏字段
1、詳述表單隱藏字段:一個web服務器可以發送一個HTML表單隱藏字段,以及一個唯一的session會話ID,每次當web瀏覽器發送請求時,session_id值可以用於保護不同的web瀏覽器的跟蹤。
2、語法格式:<input type="hidden" name="session" value="......">
type屬性:hidden表示該字段為隱藏字段,不會在瀏覽器中顯示。當表單被提交時,其name屬性和value屬性的值被包含在get或post數據中。
缺點:當用戶查看源代碼時,可以看到隱藏字段的屬性值,存在安全漏洞。
項目ch04案例:
創建sessionhidden.jsp
創建formAction.jsp
結果:http://localhost:8080/ch04/sessionhidden.jsp
六、Session跟蹤---Cookie
1、Cookie概念:Cookie是一種web服務器通過瀏覽器在訪問者的硬盤上存儲信息的手段。
當用戶再次訪問某個站點時,服務器將要求瀏覽器查找並返回先前發送的Cookie信息,從而識別這個用戶。
2、Cookie的目的:方便用戶以及向服務器端傳送相關信息。
Cookie不能用來做任何方式的運行或解釋,因此也無法被病毒利用或以其他方式被用於攻擊系統。
3、 作用:用來保存用戶的識別信息。
瀏覽器一般只能為每個站點接收20個Cookie,總計Cookie不能超過300個,每個Cookie被限制在4KB以內,故不用擔心Cookie會占滿磁盤空間,也不用擔心它們會被用於運行某些服務器所禁止的攻擊。
4、語法:Cookie(String name,String value)
Cookie具體實現過程:通過response對象提供的addCookie()方法,將Cookie傳送到客戶端。若需要讀取Cookie,則調用request對象的getCookies()方法,該方法返回Cookie對象的數組,遍歷數組,通過getName()方法找到與期望名稱相符的Cookie,然后再調用getValue()方法獲得該Cookie的值。
5、使用Cookie實現session跟蹤
項目ch04案例:
創建cookie.jsp
創建cookieAction.jsp
結果:http://localhost:8080/ch04/cookie.jsp
重點:若用戶名為中文,則會報錯,有哪位大神可以幫忙解決一下:
七、HttpSession對象
1、概念:Servlet提供了使用HttpSession接口來實現session跟蹤,它是建立在Cookie和URL重寫之上的高級接口。使用Cookie的前提是瀏覽器支持Cookie,若瀏覽器不支持Cookie或者Cookie被禁用,則使用URL重寫,而使用URL重寫需要添加附屬信息,存在很大的安全漏洞,但使用Servlet不存在這樣的問題,Servlet會自動提供數據的存儲空間並將其和session關聯起來。
Servlet可以查詢到session對象並將其關聯到當前request對象、創建新的session對象、查詢與session相關聯的信息、在session中存儲信息和銷毀session。
項目ch05案例:使用servlet程序實現session跟蹤
step1:創建繼承HttpServlet的Servlet,在類中使用HttpSession接口實現session跟蹤
step2:修改創建Servlet時,創建的web.xml
結果:
案例解析:在本案例中,使用創建的Servlet類來實現session跟蹤,並在web.xml中配置訪問Servlet的地址等信息。Servlet可以捕獲很多session相關信息。