Session是什么
因为Http请求是无状态的,两次Http请求无法产生关联,但是我们为了让用户只登陆一次,接下来操作我们都知道是该登录用户的操作,我们就需要记录这个状态。
首先想到的是在cookie,cookie是把少量的信息存储在用户自己的电脑上,他在一个域名下是一个全局的,需要设置它的存储路径在域名www.a.com下,names当用户用浏览器访问时,php就可以从这个域名的任意页面读取cookie中的信息。
但是cookie是不安全的,可以被修改的。
Session是服务器存储数据的方式,肯定也存储在服务器的某个地方。确实,它存储在服务器的/tmp目录下。因为在linux中,/tmp是专门用来存储临时变量的。
Session是用来使服务端保持HTTP状态信息的方案
项目的HttpSession是怎么运作的
当程序需要为某一个客户端请求创建一个session时,服务器首先检查这个客户端的请求是否包含了一个session标识(sessionId)[存在cookier里面,下一次请求时候会把sessionId发回来],如果已经包含一个sessionId则说明以前已经为此客户创建过Session,服务器就按照sessionID吧这个session检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的session对象,单用户人为的在请求的URL后面附加上一个JSESSION的参数),如果客户端请求不包含sessionID,则为此客户端创建一个Session,并且生成一个与此session相关联的sessionId,这个sessionID将在本次响应中返回给客户端保存。
常用的方法:
1.获取Session对象
request.getSession(),request.getSession(boolean create);
2.属性相关的
getAttribute()、setAttribute()、removeAttribute();
使HttpSession失效
invalidate()
setMaxInactiveInterval()
Spring MVC中的HttpSession
1、Session的生命周期
Session存储在服务器端,Session在用户第一次访问服务器时创建。
只有在访问JSP、或者Servlet的时候才会创建Session
只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session、
用户每次访问服务器一次,无论是否读写Session,服务器都认为该用户的Session活跃了一次,服务器都会更新中该Session的最后访问时间,并维持该session。
随着用户的增多,session存储在内存中会越来越多,为了防止内存溢出,服务器会把长时间没有活跃的Session从内存中删除,这个事件就是Session的超时时间,如果超过超时时间没有访问服务器,Session就自动失效了。
Session的超时时间为maxInactiveInterval属性,可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(longinterval) 修改。
Session的超时时间也可以在web.xml中修改。另外,通过调用Session的invalidate()方法可以使Session失效
在hy项目中web.xml中配置session的失效时间为30分钟
2、Cookie的生命周期问题
如果不设置过期时间,则表示这个cookie声明周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。cookie一般不保存在硬盘上而是保存在内存里。
设置Cookie对象的有效时间,setMaxAge()方法便可以设置Cookie对象的有效时间
cookie.setMaxAge设置为0时,会马上在浏览器上删除指定的cookie
cookie.setMaxAge设置为-1时,代表关闭当前浏览器即失效。
3、Spring MVC生命周期
dispatcherServlet会初始化HandlerMapping(请求到各个Controller处理器的映射)
dispatcherServlet会初始化HandlerAdapter(调用Controller里需要被执行的方法)
dispatcherServlet会初始化HandlerExceptionResolver(有异常抛出,会交给它来进行异常处理)
dispatcherServlet会初始化ViewResolver(把Controller中调用返回值最终包装成ModelAndView)如果View是一个字符串,它就负责处理这个字符串并返回一个真正的View,如果view是一个真正的view则不会交给它处理)