会话管理
会话管理
1.什么是会话管理
在人机交互,会话管理是保持用户的整个会话活动的互动与计算机系统跟踪过程。
2.为什么要使用会话管理
在解决这个问题前,我们要先了解什么是http协议
Http协议:超文本连接协议。
Http的两大特性
1.面向连接—>请求响应式---->服务器被动请求
do/get(HttpServletRequest,HttpServletResponse),这两个对象完美契合了面向连接这一特性。
2.无记忆性—短连接
无记忆性是指当我们第二次访问同一地址时,网络是无记忆的。然而我们想记录下来我们的每一次操作,我们就需要使用会话管理技术了。
3.会话管理(Session)
服务器能处理不同request请求,对每个用户都保持会话,每个会话安全。
- 保持记录
- 时效性:默认为30min
- 会话安全
4.如何实现会话管理
4.1 cookie( 浏览器)
- 存在于浏览器
- 存活时间:浏览器关闭
- 存文本
- 数据量比较小
- 不安全
- JSseeionId
4.2 HttpSession
- 存在于服务器
- 存活时间:默认为30min
- 存对象
- 不建议大数据
- 安全
- 产生SessionId
4.3 会话管理完整流程
- 客户端A向服务器发起请求
- 服务器创建一个Session对象(会话管理对象)
- 服务器获得Session对象的id值(SessionId)
- 服务器中可以看到SessionId=acbe12423432525…(一个16进制的id),和服务器之间的唯一值
- 客户端A再次发起请求,自动携带cookie(JSessionId)
- 服务器发现携带的JSessionId,取出值,在服务器内找到session对象
- 取出session的内容
5.会话管理实例
@WebServlet("/session.action")
public class SessionServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();
//session.setMaxInactiveInterval(60);
session.setAttribute("key", "我是session值,时间为30min");
System.out.println(session.getId());
//创建一个cookie对象
Cookie cookie =new Cookie("hello", "cookie");
response.addCookie(cookie);//将cookie传到页面上
response.sendRedirect("session.jsp");//重定向,相当于跳转
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}