首先session跟cookies都是会会话进行跟踪,session通过在服务器端记录信息来记录,cookies通过在客户端记录信息来记录。

在此只对session进行分析:

     session是记录在服务器内存中的,每当一个用户通过浏览器第一次进行访问时进行创建(需要注意只有访问jsp,servlet等程序时才会创建Session,只访问html,image等静态资源时不会创建,可调用request.getSession(true)强制生成Session。jsp在编译成servlet的时候也会默认强制生成一行HttpSession session = request.getSession(true)从而创建一个会话)。同时服务器会将该新建的session的id返回给浏览器,浏览器则会将该id记录在其会话cookies里,之后每次请求都会在请求头的set-Cookies里传递一个参数JSESSEIONID=xxxxxx。服务器则会在接收到请求后拿到JSESSEIONID对应的值,并返回id所对应的session给用户使用。

     session进行会话跟踪有两种方法:

     那么session什么时候会失效呢?

          1.用户前后两次访问间隔超过session失效时间则Session会失效。Tomcat中Session的默认失效时间为30分钟。我们可以在web.xml中进行设置失效时间:

 

<session-config> 

 

                           <session-timeout>100</session-timeout> 

 

                      </session-config>

          2.显示的调用session的invalidate方法可销毁session。

     对于网络上的一个说法:当用户关闭了浏览器后session会销毁,这其实是错误的。关闭浏览器只会关闭掉会话cookies,而session则会继续保存在服务器端。那么有人会说重新打开浏览器后访问的时候为什么cookies中的JSESSIONID已经改变了呢?那是因为该会话cookies在浏览器关闭后也关闭了,重新请求是服务器拿不到JSESSIONID所以会认为此用户是第一次访问我的,所以重新创建了一个session并返回一个新的sessionId。(之前的session依然存在于服务器中)