Session的实现原理

Session的实现原理
    Session的实现方式有两种,一个是通过cookie,另一个是通过url重写。 
1. 通过cookie 
Cookie是保存在客户端的一小段信息,服务器在响应请求时可以将一些数据以“键-值”对的形式通过响应信息保存在客户端。当浏览器再次访问相同的应用时,会将原先的Cookie通过请求信息带到服务器端。 
在MyEclipse环境下新建一个Web Project,命名为Test,在WebRoot下新建一个名为cookie的jsp页面,代码如下:  Java代码  
1.<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
2.  
3.  
4.     
5.    session实现原理  
6.   
7.    
8.    
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 15.              out.println(c[m].getName()+" "+c[m].getValue()+"
");  
16.           }  
17.        }  
18.     %>  
19.    
20. 

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> 

 
   
        session实现原理  
        
        
        <%
            Cookie [] c = request.getCookies();      
            if(c==null){
                out.println("sorry,cookie is null...");       
            }else{
                for(int m =0;m                     out.println(c[m].getName()+" "+c[m].getValue()+"
");        
                }       
            }    
        %> 
   

打开浏览器,在地址栏中输入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,采用超链接的方式,可以用两种方式:一种如下所示:  2.jsp 
另一种是">2.jsp 
其中第二种方式就是采用了url重写,在cookie没有被禁用的情况下,它与第一种情况没有什么区别,但在cookie禁用是,它会将SessionID的信息作为请求地址的一部分传到了服务器端,这就是URL重写的意义所在。  

1.<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
2.   
3.   
4.      
5.    session实现原理   
6.   
7.     
8.     
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 15.              out.println(c[m].getName()+" "+c[m].getValue()+"
");   
16.           }   
17.        }   
18.     %>   
19.     
20.  

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>  

 
    
        session实现原理   
         
         
        <%
            Cookie [] c = request.getCookies();       
            if(c==null){
                out.println("sorry,cookie is null...");        
            }else{
                for(int m =0;m                     out.println(c[m].getName()+" "+c[m].getValue()+"
");         
                }        
            }     
        %>  
    

你可能感兴趣的:(JavaApp)