Session

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则不会交给它处理)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值