会话状态管理
1.什么是会话
用户为了实现一个目标,从打开浏览器开始,致关闭浏览器期间与服务器进行的多次交互,统称一次会话 注:一次回话可以包含多次请求和响应
2.会话状态
会话回程中产生的一些临时数据
3.会话状态管理
对会话状态(数据)进行增删改查
4.为什么需要会话状态管理技术
1.http是一种没有会话状态管理的协议
- 一次请求一次响应即断开服务器与浏览器的连接,无法记录用户的会话状态
- 使用会话状态管理技术来保存用户的会话状态
如何实现会话状态
1.cookie:将用户的会话状态保存在浏览器的技术
- Cookie的原理
服务器使用set-cookie的响应头,将用户的会话状态发送给浏览器进行保存
浏览器使用cookie的请求头,将自己保存的会话状态发送给服务器,供服务器使用 - API
存Cookie:
Cookie cookie=new Cookie(“name”,“admin”);
cookie.getName();
cookie.getValue();
response.addCookie(cookie);
取cookie:
Cookie[] cs=request.getCookies();
设置cookie有效时间:
API: cookie.setMaxAge(int seconds);
设置cookie路径
cookie.setPath(request.getContextPath());
乱码问题
username=URLEncoder.encode(username,“UTF-8”)
username=URLDecoder.decode(username,“UTF-8”) - Cookie的删除
服务器向浏览器发送一个和被删除Cookie同name,同path和同domain的Cookie,并将该Cookie的maxAge设置为0,浏览器收到这个新的Cookie后,会替换原Cookie,并马上删除新的Cookie
2.session:将用户的会话状态保存在服务器的技术
- 原理
- 当用户需要保存会话状态时,在服务器上为用户创建一个Session对象,保存会话状态
- 服务器将该Session对象的ID发给用户,方式是Cookie,内容JSESSIONID=123
- 用户在后续的请求中,会自动携带JSESSIONID的Cookie,服务器收到后,根据其值,查找用户对应的Session对象,获取用户的会话状态
- API
HttpSession session=request.getSession();创建
session.setAttribute(String name,Object value); // 存
session.getAttribute(String name); // 取
session.removeAttribute(String name); // 删除 - session的销毁
1.超时:
默认存在30分钟,从用户最后一次访问该session开始算
可以在web.xml中配置session的超时时间30
2.自杀:
session.invalidate();马上销毁
3.他杀
如果服务器异常关闭,所有的Session都会被销毁
如果服务器正常关闭,未超时的Session将会被序列化到本地硬盘上保存(钝化),当服务器再次其中时,本地硬盘上的Sesssion会被反序列化到内存中(活化),继续生效 - Session和request在共享数据上的区别
在一次请求中共享数据,使用request,比Session高效
一次请求中共享的数据,响应发出后就没有必要存在了
如果保存在request中,根据request的生命周期,响应发出前,request会被销毁,数据也会被及时销毁
如果保存在session中,默认会保存30分钟,造成内存资源的浪费
跨请求共享数据,request无法实现,使用Session
服务器会为每次请求创建新的request对象,因此request无法实现跨请求的资源共享
涉及跨请求共享数据,不能使用request,只能用session - Session的特点
- Session保存在服务器上,数据的安全性和稳定性相对高
- Session中保存的数据的大小,理论上是没有限制的
- Session存活的时间比较短,默认30分钟
Cookie和Session的区别?
1.Cookie是将会话状态保存在浏览器的技术
2.Session是将会话状态保存在服务器的技术
3.Cookie中的数据的安全性和稳定性较差,但是保存时间较长
4.Session中的数据安全性和稳定性较高,但是保存时间较短
Session的特点
- Session保存在服务器上,数据的安全性和稳定性相对高
- Session中保存的数据的大小,理论上是没有限制的
- Session存活的时间比较短,默认30分钟
Cookie的特点
- Cookie可能会被用户删除,稳定性不高
- Cookie保存在客户电脑上,安全性也不高
- Cookie保存数据的大小有限制,一般是4kb
- 一个浏览器保存Cookie的数量也有限制,一个网站20个,一共保存300个
- Cookie可以持久保存,例如30天