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. }  

简单的总结了一下,正在学习中... ...


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