浅谈session

423 阅读2分钟

1. 什么是session?

强调:Session为了解决HTTP是无状态协议所带来的问题,是用于服务端与客户端进行交互的,交互数据是存在服务器的。

session.png

浏览器向服务器发送请求,服务器会创建一个session对象(该对象有一个唯一的标识sessionId),将sessionId通过set-cookie消息头的方式发送给浏览器,浏览器会将其保存在内存中,当浏览器再次向服务器发送请求时,会将sessionId通过cookie消息头的方式发送给服务器,在服务端,根据sessionId可以查找到session对象,从而可以获取到session对象中绑定的数据,通过此方式实现状态管理的目的。

2.如何获取session?

一、HttpSession session = request.getSession(true);

服务器会检查请求数据包

  1. 是否包含sessionId
  • 没有,创建新的session对象
  • 有,根据sessionId查找session对象,查到->返回session对象,否则->创建新的session的对象

二、 HttpSession session = request.getSession(true);

  1. 是否包含sessionId
  • 没有,返回空
  • 有,根据sessionId查找session对象,查到->返回session对象,否则->返回空

三、HttpSession session = request.getSession(); 等价于第一种

3.服务端与客户端进行交互

---session.getId();获取session对象的id

---session.setAttribute(String name,Object obj);绑定数据

---Object:session.getAttribute(String name);根据绑定名获取绑定值   

4.session超时问题

服务器默认时间是30分钟,超过指定时间的session对象会被移除,可以通过以下方式修改默认超时时间:

方式一: 修改tomcat/conf/web.xml文件配置参数,单位:分钟

<session-config>
      <session-timeout>30</session-timeout>
  </session-config>

方式二: 在某个应用的web.xml中,添加session-config的配置,该应用下所有session超时时间都被统一修改,单位:分钟

方式三: 修改某一个session对象的超时时间,单位:秒

  ` session.setMaxInactiveInterval(int seconds);`

5.session删除

该方法是使session无效,但在一些特定环境下,不能实现真正的删除效果

` session.invalidate();`

比如,在一个简单的web应用下,需要登录成功,才能访问受保护的页面,就需要进行信息验证。

附,解决方式: 登录后,使用session.setAttribute(String name,Object obj);绑定用户信息,在受保护页面,根据session.getAttribute(String name);根获取绑定值校验用户信息