Session的兩種實現方式

 Session的實現方式有兩種,一個是通過cookie,另一個是通過url重寫。

http://www.iteye.com/topic/487635

1. 通過cookie 
Cookie是保存在客戶端的一小段信息,服務器在響應請求時可以將一些數據以“鍵-值”對的形式通過響應信息保存在客戶端。當瀏覽器再次訪問相同的應用時,會將原先的Cookie通過請求信息帶到服務器端。 
在MyEclipse環境下新建一個Web Project,命名爲Test,在WebRoot下新建一個名爲cookie的jsp頁面,代碼如下: 

Java代碼  收藏代碼
  1. <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>   
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  3. <html>  
  4.   <head>   
  5.     <title>session實現原理</title>   
  6.   </head>  
  7.     
  8.   <body>  
  9.      <%  
  10.         Cookie [] c = request.getCookies();  
  11.         if(c==null){  
  12.            out.println("sorry,cookie is null...");  
  13.         }else{  
  14.            for(int m =0;m<c.length;m++){  
  15.               out.println(c[m].getName()+" "+c[m].getValue()+"<br>");  
  16.            }  
  17.         }  
  18.      %>  
  19.   </body>  
  20. </html>  


打開瀏覽器,在地址欄中輸入http://localhost:8080/Test/cookie.jsp,會輸出"sorry,cookie is null...",表明在此次請求信息中沒有cookie信息,但在這一過程中,服務器會自動生成一個session(因爲session是jsp中的內置對象,如果在servlet中必須顯示請求session,纔會生成,即HttpSession session = request.getSession();)用以表示此次“會話”,同時將與該session相對應的sessionID以cookie的方式發送給客戶端。當客戶端再次請求該頁面(應用程序)時,會自動將此cookie通過請求信息帶到服務器端。因此,當你刷新上一次的請求時,頁面會輸出一個名爲JSESSIONID的cookie,後面就是相應的cookie值,也就是本次“會話”的sessionID, 
,當你再次刷新此頁面時會得到相同的輸出,因爲在一次“會話”中,請求信息攜帶的sessionID與上一次響應的sessionID相一致。存放在客戶端的用於保存sessionID的cookie會在瀏覽器關閉時清除,因此當你重新打開一個瀏覽器時,第一次的輸出依然會是"sorry,cookie is null..."因爲服務器認爲這是一次新的“會話”,同樣當你刷新此頁面時,頁面會輸出一個名爲JSESSIONID的cookie,但注意此時後面的cookie值與上一次肯定不相同,因爲這是一次新的“會話”。 


2. url重寫 
通過cookie可以很好地實現session,但是如果客戶端由於某些原因(比如出於安全考慮)而禁用cookie,在這種情況之下,爲了使session能夠繼續生效,可以採用url重寫。url重寫很簡單,比如我要從1.jsp頁面跳轉到2.jsp,採用超鏈接的方式,可以用兩種方式:一種如下所示: 
<a href="2.jsp">2.jsp</a> 
另一種是<a href="<%=response.encodeURL("2.jsp")%>">2.jsp</a> 
其中第二種方式就是採用了url重寫,在cookie沒有被禁用的情況下,它與第一種情況沒有什麼區別,但在cookie禁用是,它會將SessionID的信息作爲請求地址的一部分傳到了服務器端,這就是URL重寫的意義所在。 

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