JavaWeb——會話技術Cookie & Session
會話技術
因為Http協議是無狀態的,也就是說每個客戶訪問服務器端資源時,服務器並不知道該客戶端是誰,所以需要會話技術識別客戶端的狀態。會話技術是幫助服務器記住客戶端狀態(區分不同的客戶端)
從打開一個瀏覽器訪問某個站點,到關閉這個瀏覽器的整個過程,成為一次會話。會話技術就是記錄這次會話中客戶端的狀態與數據的。
會話技術分為Cookie和Session:
- Cookie:數據存儲在客戶端本地,減少服務器端的存儲的壓力,安全性不好,客戶端 可以清除cookie
- Session:將數據存儲到服務器端,安全性相對好,增加服務器的壓力
一、Cookie技術
Cookie技術是將用戶的數據存儲到客戶端的技術。
1、設置cookie
Cookie cookie = new Cookie("username","x5456"); // 創建cookie對象 cookie.setMaxAge(10*60); // 設置cookie有效期為10min,默認是到瀏覽器關閉時,設置為0清除cookie cookie.setPath("/WEB16"); // 設置cookie攜帶路徑,默認會將整個web應用(/WEB16)戴上cookie response.addCookie(cookie); // 將cookie中存儲的信息發送到客戶端
註意:如果不設置持久化時間,cookie會存儲在瀏覽器的內存中,瀏覽器關閉 cookie信息銷毀(會話級別的cookie),如果設置持久化時間,cookie信息會 被持久化到瀏覽器的磁盤文件裏
cookie只能存除中文的字符串
2、獲取指定的cookie
cookie信息是以請求頭的方式發送到服務器端的
Cookie[] cookies = request.getCookies(); // 獲取cookie列表 for(Cookie cookie : cookies){ // 遍歷Cookie數組,通過Cookie的名稱獲得我們想要的Cookie if(cookie.getName().equals("username")){ String cookieValue = cookie.getValue(); System.out.println(cookieValue); } }
3、清除cookie
Cookie c = new Cookie("name",""); // key為要清除的cookie c.setMaxAge(0); c.setPath("/WEB16"); // 路徑要和之前一樣 response.addCookie(c);
二、Session技術
Session技術是將數據存儲在服務器端的技術,會為每個客戶端都創建一塊內存空間存儲客戶的數據,但客戶端需要每次都攜帶一個標識ID去服務器中尋找屬於自己的內存空間。所以說Session的實現是基於Cookie,Session需要借助於Cookie存儲客戶的唯一性標識JSESSIONID
1、向session域中存取數據
session也是一個域對象,所以也可以用get/set/remove方法
/* * request.getSession()方法內部會判斷 該客戶端是否在服務器端已經存在session * 如果該客戶端在此服務器不存在session 那麽就會創建一個新的session對象 * 如果該客戶端在此服務器已經存在session 獲得已經存在的該session返回 */ HttpSession session = request.getSession(); session.setAttribute("name","x5456"); // 設置Session String JSESSIONID = session.getId(); // 獲取Session對象的編號id Cookie cookie = new Cookie("JSESSIONID",JSESSIONID); // 手動創建一個存儲JSESSIONID的Cookie,為該cookie設置持久化時間 cookie.setPath("/WEB16"); cookie.setMaxAge(60*10); response.addCookie(cookie);
2、獲得Session中的值
HttpSession session = request.getSession(); // 獲取域對象 Object name = session.getAttribute("name"); System.out.println( (String) name);
Session對象的生命周期
創建:第一次執行request.getSession()時創建
銷毀:
1)服務器(非正常)關閉時
2)session過期/失效(默認30分鐘)
時間的起算點:從不操作服務器端的資源開始計時
可以在工程的web.xml中進行配置過期時間
<session-config>
<session-timeout>30</session-timeout>
</session-config>
3)手動銷毀
session.invalidate();
作用範圍:
默認在一次會話中,也就是說在,一次會話中任何資源公用一個session對象
JavaWeb——會話技術Cookie & Session