7 Servlet 會話技術
1 什麽是會話
用戶開一個瀏覽器訪問某個網站,點擊多個鏈接,訪問服務器多個web資源,然後關閉瀏覽器,整個過程稱之為會話,與打電話類似。會話過程要解決一些問題,
每個用戶在使用瀏覽器與服務器進行會話時,會產生一些數據,服務器需要為每個用戶保存這些數據。Servlet 保存會話信息的技術有:session 與 cookie。
2 cookie
① 為什麽需要cookie 技術
- 登錄網站時顯示用戶最後一次登錄時間,不同的用戶顯示的最後一次登錄時間不同;
- 訪問購物網站時,如何保存用戶曾經瀏覽過的商品,並且顯示給用戶;
- 登錄網站時,顯示需要保存登錄信息多久;
② 什麽是 cookie
cookie 是客戶端技術,服務器端把每個用戶的信息(登錄名,密碼等)以cookie 的形式保存在客戶端的瀏覽器緩存目錄下的,在需要的時候可以從客戶端讀取。
③ cookie 工作流程
④ cookie 使用
cookie 像一張表,分兩列,一個是名字,一個是值,數據類型都為String。
cookie 的創建與讀取
1 //創建Cookie 對象 2 Cookie cook = new Cookie("name","latiny1"); 3 //設置Cookie生命周期 4 cook.setMaxAge(3600); 5 //將cook返回給瀏覽器 6 response.addCookie(cook); 7 8 //讀取Cookie 9 Cookie[] cookies = request.getCookies();
⑤ cookie 的特點
- cookie是在服務器端創建的;
- cookie 是保存在瀏覽器端的(客戶端);
- cookie可以被多個瀏覽器共享;
- cookie 重名會覆蓋掉之前的cookie,只有最後一個有效;
- cookie存放時以明文的形式存放,因此安全性比較低;
- 一個瀏覽器最多放300個Cookie,一個站點最多放20個cookie,一個cookie大小限制在4K。
- Cookie默認的生命周期是會話級別(瀏覽器關閉時,cookie就會被一起刪除);通過setMaxAge()可以設置生命周期,設置為0或者負數時,代表清除客戶端的cookie。
3 session
① 為什麽需要session
如何實現在不同的頁面可以查看信息(如購物車),不同的用戶看到的信息不一樣。
② 什麽是session
Session是服務端技術,服務器在運行時可以為每個用戶的瀏覽器創建一個獨享的session對象,由於session為用戶瀏覽器獨享,所以用戶在訪問服務器資源時,可以把各自的數據放在各自的session中,當用戶再去訪問服務器中的其他web資源時,其他web資源再從用戶各自的session中取出數據為用戶服務。
③ session 的特點
- session是放在服務器內存中的;
- 一個用戶瀏覽器獨享一個session域對象;
- session 生命周期指的從最後一次訪問或者操作session 時計算,默認為30minutes,可以通過web.xml修改;
a. 修改 tomcat/cnf/web.xml修改,對所有web應用生效
1 <session-config> 2 <session-timeout>30</session-timeout> 3 </session-config>
b. 修改自己項目的web.xml 文件
<session-config> <session-timeout>1</session-timeout> </session-config>
如果兩邊配置不一致,則以自己項目配置為準。
c. 在代碼裏設置
//設置session的有效時間,從最後一次使用開始計算 session.setMaxInactiveInterval(60);
- session 失效指的整個session失效,而不只是session的某個屬性失效;通過函數se.invalidate() 強制整個session失效,通常用於安全退出;設置session 某個屬性失效,se.removeAttribute("name"); 重啟tomcat,reload web 應用,關機等操作,session都會失效;
④ session 的使用
獲取創建session
//獲取session HttpSession se = request.getSession(); se.setAttribute("name","latiny");
使用session
//獲取使用 session HttpSession se = request.getSession(); String name=(String)se.getAttribute("name");
⑤ session 實際應用
a. 網上商城購物車
b. 保存用戶登錄信息
c. 放入某些需要的信息供同一個用戶的各個頁面使用
d. 防止用戶非法登錄到某個頁面
⑥ 禁用Cookie 之後怎麽實現購物車功能(購物車要通過session 來實現,而session的信息的傳遞需要cookie協助),使用encodeURL
a. 在發送頁面加入以下代碼
//訪問以下session request.getSession(); String url = response.encodeURL("/ShopCart/BookHandle?id="+book.getId());
b. 在接受頁面對url使用encode
String url = response.encodeURL("/ShopCart/ShowBook");
out.println("<a href=‘"+url+"‘ >返回商品頁面</a></br>");
4 Session 與 Cookie 總結
① 存儲位置不一樣
Cookie存在客戶端瀏覽器的臨時文件下。
Session存在服務器端的內存中,一個session域對象為一個用戶瀏覽器服務。
② 安全性
Cookie 以明文方式存放在客戶端的,安全性較低;可以通過加密算法加密之後再存放。MD5
Session 存放在服務器內存中,安全性高。
③ 網絡傳輸量
Cookie 會傳遞信息給服務器。
Session 的屬性值不會給客戶端。
④ 生命周期
Cookie 生命周期是累計的,從創建時就開始計時,例如它的生命周期為30分鐘,則從創建時開始計時,30分鐘後失效。
Session 生命周期是間隔時間,即從用戶最後一次訪問session開始計時,例如它的生命周期為30分鐘,則30分鐘內沒有用戶訪問,它才會失效。關閉tomcat;reload web應用;時間到;調用invalidate方法。
⑤ 訪問範圍
Session 為一個用戶瀏覽器獨享
Cookie 為多個用戶瀏覽器共享
⑥ 使用原則
因為Session 會占用服務器內存,因此盡量少使用session,不要在session存放過多過量的數據,會影響性能。
7 Servlet 會話技術