服务器---session理论知识

1 session理论知识

1.1 session何时创建

1.2 session何时销毁

1 session何时创建

Session 机制:

session机制是一种服务器端的机制,
用来在无状态的HTTP协议下越过多个请求页面来维持状态和识别用户。
当程序需要为某个客户端的请求创建一个session的时候,
服务器首先检查这个客户端的请求里是否已包含了一个session标识。

这个标识称为session id,
如果已包含一个session id则说明以前已经为此客户端创建过session,
服务器就按照session id把这个session检索出来使用,
若没有创建过,则创建一个新的Session。

  

 先介绍一下测试环境:

   

其中servlet和jsp都是默认内容。

  测试1:分别请求servlet和jsp,通过浏览器查看是否生成session。

  测试结果:请求servlet没有产生session,请求jsp产生了session。

  理论知识:jsp的本质是servlet,只有在servlet中调用request.getSession();或者request.getSession(true);服务器才会产生session。如果调用request.getSession(false);将不会产生session。那么为什么jsp会产生session。

  查找原因:

  在eclipse项目所在的工作空间中,找到jsp的源码

 

  查看index.jsp源代码:

 

   可以看到在index.jsp的java代码中,自动获取了session。

   


   先介绍一下测试环境:

   

其中servlet和jsp都是默认内容。

  测试1:分别请求servlet和jsp,通过浏览器查看是否生成session。

  测试结果:请求servlet没有产生session,请求jsp产生了session。

  理论知识:jsp的本质是servlet,只有在servlet中调用request.getSession();或者request.getSession(true);服务器才会产生session。如果调用request.getSession(false);将不会产生session。那么为什么jsp会产生session。

  查找原因:

  在eclipse项目所在的工作空间中,找到jsp的源码

 

  查看index.jsp源代码:

 

   可以看到在index.jsp的java代码中,自动获取了session。

   

因为jsp中指令session默认配置为true,

<%@ page session="true"%>
 
        

OK,那我们现在试试<%@ page session="false"%>,然后再去访问这个jsp页面。
当然你需要先关闭浏览器再打开,否则原来的session还在那里呢。

    响应头信息           原始头信息
Content-Length	     824
Content-Type         text/html;charset=ISO-8859-1
Date                 Thu, 05 Apr 2012 14:47:38 GMT
Server               Apache-Coyote/1.1

好了,这时我们发现那个JSESSIONID已经消失了,控制台输出的session==null结果也是true了。

总结:
session不是一打开网站就会立刻建立。


 
        

它的建立需要基于下面两个条件中的任意一个:

1:在servlet中手动调用

        request.getsession()

2 :jsp中没有写<%@ page session="false"%>

    (默认情况下它是<%@ page session="true"%>的)

    如果两个条件同时都不满足,那么你建立的只是一个无seesion的连接。


    

2 session何时销毁

一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server 端程序(如 Servlet )调用 
[java]  view plain  copy
  1. HttpServletRequest.getSession(true)  //false 不会自动创建Session   
这样的语句时才会被创建。所以没有调用getSession方法则不会创建session。 

要了解Session首先要知道一个概念:Session的销毁只有两种情况: 

第一:session调用了 session.invalidate()方法。 
第二:前后两次请求超出了session指定的生命周期时间。
 

注意如果服务器正常关闭不会销毁

其中Session的生命周期时间可以在web.xml配置。默认30分钟 在web.xml可以做如下配置: 
[xml]  view plain  copy
  1. <session-config>  
  2.       <session-timeout>5</session-timeout>  
  3. </session-config>  

   如何来证明关闭浏览器的时候Session没有销毁呢?  我们可以创建一个SessionListener 此监听器专门用来监听Session的生命周期的.
    代码如下: 
    tomcat 可以持久化到本地文件
     然后关闭查看

 

猜你喜欢

转载自blog.csdn.net/hellolovelife/article/details/80307720