会话状态管理

会话状态管理

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:将用户的会话状态保存在服务器的技术

  • 原理
  1. 当用户需要保存会话状态时,在服务器上为用户创建一个Session对象,保存会话状态
  2. 服务器将该Session对象的ID发给用户,方式是Cookie,内容JSESSIONID=123
  3. 用户在后续的请求中,会自动携带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的特点
  1. Session保存在服务器上,数据的安全性和稳定性相对高
  2. Session中保存的数据的大小,理论上是没有限制的
  3. Session存活的时间比较短,默认30分钟

Cookie和Session的区别?

1.Cookie是将会话状态保存在浏览器的技术
2.Session是将会话状态保存在服务器的技术
3.Cookie中的数据的安全性和稳定性较差,但是保存时间较长
4.Session中的数据安全性和稳定性较高,但是保存时间较短

Session的特点

  1. Session保存在服务器上,数据的安全性和稳定性相对高
  2. Session中保存的数据的大小,理论上是没有限制的
  3. Session存活的时间比较短,默认30分钟

Cookie的特点

  1. Cookie可能会被用户删除,稳定性不高
  2. Cookie保存在客户电脑上,安全性也不高
  3. Cookie保存数据的大小有限制,一般是4kb
  4. 一个浏览器保存Cookie的数量也有限制,一个网站20个,一共保存300个
  5. Cookie可以持久保存,例如30天

猜你喜欢

转载自blog.csdn.net/buxiangmafan/article/details/89197115