Cookie和Session-----會話跟蹤中的兩個重要技術

Cookie的工作原理:

       Cookie是最常用的客戶會話跟蹤技術。Cookie是將會話數據保存在客戶端來維護會話狀態的一種方式。它是服務器發送給瀏覽器的體積很小的純文本信息,用戶以後在訪問同一個Web服務器時,瀏覽器會把Cookie原樣發送給服務器。通過這種方式,保存了用戶的會話狀態。

       Cookie分爲兩類:持久的和暫時的。持久的Cookie會被存儲在客戶端文件中;暫時的Cookie存儲在內存中,一旦瀏覽器關閉Cookie就消失了。一般來說,客戶端瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制爲4kb,因此Cookie不會佔用太大的硬盤空間。雖然Cookie很好用而且持久性高,但是由於有些用戶擔心Cookie對個人隱私有威脅,會關閉Cookie。一旦這樣,便無法利用Cookie來達到會話追蹤的功能了。下面看看Cookie具體怎麼使用:

SetCookies.java(寫入)

  1. import java.io.*;  
  2. import javax.servlet.http.*;  
  3. import javax.servlet.*;  
  4.   
  5. public class SetCookies extends HttpServlet {  
  6.       
  7.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
  8.     throws ServletException, IOException {  
  9.           
  10.         Cookie c1 = new Cookie("password""123");  
  11.         response.addCookie(c1);  
  12.           
  13.         Cookie c2 = new Cookie("client_ip", request.getRemoteAddr());  
  14.           
  15.         //設置cookie的生命週期爲一個小時,單位爲秒  
  16.         c2.setMaxAge(60*60);  
  17.         response.addCookie(c2);  
  18.           
  19.         response.getWriter().println("SetCookies OK!");  
  20.     }  
  21. }  

ShowCookies.java(讀取)

  1. import java.io.*;  
  2. import javax.servlet.http.*;  
  3. import javax.servlet.*;  
  4.   
  5. public class ShowCookies extends HttpServlet {  
  6.       
  7.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
  8.     throws ServletException, IOException {  
  9.         Cookie[] Cookies = request.getCookies();          
  10.         for (int i=0; i<Cookies.length; i++) {  
  11.             Cookie c = Cookies[i];  
  12.             response.getWriter().println(c.getName() + ", " + c.getValue());  
  13.         }  
  14.     }  
  15. }   

 

Session的工作原理:

       HttpSession對象自動爲開發者提供一個可以方便地存儲會話信息的地方,HttpSession的會話機制是基於Cookie和URL重寫(URL重寫就是利用GET方法,在URL的尾部添加一些額外的參數來達到會話追蹤的目的)技術,融合了這兩種技術的優點。當客戶端允許使用Cookie時,HttpSession對象使用Cookie進行會話追蹤,如果客戶端禁用Cookie,則選擇使用URL重寫。

       session與Cookie一樣擁有特定的生命週期。一個session可以利用isNew方法來得知是否爲一個新的session。所謂“新”的session就是說,他已經被Server產生,但是Client尚未被告知。

       一般來說,session在一段時間內沒有起作用就會自動失效,也就是Server會自動控管session失效的時間,不過時間的長短通常因容器而異,也可以自己手動設定session的失效時間。下面看看session具體怎麼使用:

SetSessionServlet.java(寫入)

  1. import java.io.*;  
  2. import javax.servlet.http.*;  
  3. import javax.servlet.*;  
  4.   
  5. public class SetSessionServlet extends HttpServlet {  
  6.       
  7.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
  8.     throws ServletException, IOException {  
  9.         HttpSession session = request.getSession(true);  
  10.         session.setAttribute("ip", request.getRemoteAddr());  
  11.           
  12.         response.getWriter().println("SetSession OK!");  
  13.     }  
  14. }  

ShowSessionServlet.java(讀出)

  1. import java.io.*;  
  2. import javax.servlet.http.*;  
  3. import javax.servlet.*;  
  4.   
  5. public class ShowSessionServlet extends HttpServlet {  
  6.       
  7.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
  8.     throws ServletException, IOException {  
  9.         HttpSession session = request.getSession(true);  
  10.         String ip = (String)session.getAttribute("ip");  
  11.         response.getWriter().println("ip=" + ip);  
  12.     }  
  13. }  

簡單的總結了一下,正在學習中... ...


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章