Session基础知识html
主题数据库
概念浏览器
Session的建立tomcat
Session的存储机制服务器
Session的失效cookie
参考资料session
概念spa
Session表明一次用户会话。一次用户会话的含义是:从客户端浏览器链接服务器开始,到客户端浏览器与服务端断开为止,这个过程就是一次会话。htm
Session机制采用的是在服务端保存状态的方法。对象
Session的建立
当客户端向服务器发送一个请求时,服务器首先检查请求里是否包含SessionID,若是包含了SessionID则说明该客户端已经登陆过而且服务端为此客户端建立了一个Session,服务器就依照SessionID将这个Session在服务器中找出来(若是找不到,就有可能为他新建立一个)。若是客户端请求里不包含SessionID,则为该客户新建立一个Session并生成一个与此Session相关的SessionID。这个SessionID是不重复的,惟一的,不容易找到规律的字符串。这个SessionID将在本次响应中返回到客户端保存。
Session是在服务端调用HttpServletRequest.getSession(true);这样的语句时才被建立,若是JSP没有显式的使用<%@page Session=”false”%> 关闭Session,则JSP文件在编译成Servlet时将会自动加上HttpServletRequest.getSession(true);这就是JSP内置对象session的由来。
Session的存储机制
通常状况下,Session都是存储在内存中,当服务器进程被中止或者重启的时候,内存里的Session也会被清空。若是设置了Session的持久化特性,服务器就会把Session保存到硬盘上,当服务器进程从新启动后Session里的信息可以被再次使用。
Session的存储方式及各存储方式下Session属性值是否须要可序列化:
InProc(默认) :不须要序列化,存放在IIS进程中(内存),重启IIS服务器时会话状态消失。
SQLServer:须要序列化,存放在数据库中,存储在硬盘中。
StateServer:须要序列化, 存放在Asp.Net状态服务进程中,重启Web应用时保留会话状态。
Session的失效
Session在下列状况下失效:
程序调用HttpSession.invalidate();
距离上一次收到客户端发送的SesionID时间间隔超过了Session的超时设置,tomcat默认session超时时间为30分钟;
服务器进程被中止(非持久Session);
咱们常说打开浏览器就建立了一个Session,关闭浏览器时Session也被删除,事实上,除非程序通知服务器删除Session,不然Session会被服务器一直保留,直到Session的失效时间到了自动删除。服务器不知道浏览器被关闭,浏览器不会主动地在其关闭以前通知服务器它将要关闭。程序通常是在用户注销后删除Session。咱们产生这种错觉地缘由是:通常Session机制都使用cookie来保存SessionID,而一旦关闭浏览器,SessionID就不存在了,再链接服务器时找不到原来的Session了。若是cookie保存在硬盘中,或者用某种手段改写浏览器发出的 HTTP请求头,把原来的SessionID发送给服务器,则再次打开浏览器仍然可以找到原来的Session。
偏偏因为关闭浏览器时不会让Session被删除,迫使服务器为Session设置了一个失效时间。当距离客户端上一次使用Session的时间超过失效时间,服务器就认为客户端已经中止了活动,才会把Session删除以节省存储空间。
参考资料
http://www.cnblogs.com/literoad/archive/2012/05/13/2498528.html