1. 程式人生 > >7 Servlet 會話技術

7 Servlet 會話技術

安全 瀏覽器緩存 active cookie 時間 失效 href cookies 過程

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 會話技術