- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
1. 什么是session?
强调:Session为了解决HTTP是无状态协议所带来的问题,是用于服务端与客户端进行交互的,交互数据是存在服务器的。
浏览器向服务器发送请求,服务器会创建一个session对象(该对象有一个唯一的标识sessionId),将sessionId通过set-cookie消息头的方式发送给浏览器,浏览器会将其保存在内存中,当浏览器再次向服务器发送请求时,会将sessionId通过cookie消息头的方式发送给服务器,在服务端,根据sessionId可以查找到session对象,从而可以获取到session对象中绑定的数据,通过此方式实现状态管理的目的。
2.如何获取session?
一、HttpSession session = request.getSession(true);
服务器会检查请求数据包
- 是否包含sessionId
- 没有,创建新的session对象
- 有,根据sessionId查找session对象,查到->返回session对象,否则->创建新的session的对象
二、 HttpSession session = request.getSession(true);
- 是否包含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);根获取绑定值校验用户信息