session原理解析

来源:互联网 发布:淘宝网天天特价女棉衣 编辑:程序博客网 时间:2024/04/25 01:05
首先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进行会话跟踪有两种方法:
  1.利用cookies,用户每次访问(第一次访问外)时都会通过cookies携带 session的id
  2.利用URL重写,即把sessionId写在请求链接后面,可能会以逗号,句号,分号分隔,这取决与容器内部实现。tomcat是用分号分隔。
     那么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依然存在于服务器中)
0 0