【JavaWeb】session会话跟踪技术
1.HTTP是无状态的
服务器无法判断两次请求是否是同一个客户端发送的,假如第一次请求是添加商品到购物车,第二次请求是结账,那么就会导致混乱,使用session来解决。
2.session原理
3.演示
(1)项目启动,发送第一次请求,获取请求的sessionID
@Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取session,如果获取不到,就创建一个新的 HttpSession session = request.getSession(); System.out.println("session ID:" + session.getId()); }
控制台打印
(2)查看响应头
(3)再发送一次请求,查看请求头
4.会话跟踪技术
客户端第一次发请求给服务器,服务器获取session,获取不到则创建新的,然后响应给客户端(响应头中)。
下次客户端给服务器发请求时,会把sessionID带给服务器,服务器就能识别客户端了。
5.常用方法
非激活间隔时长表示:多久时间没有操作后session失效
request.getSession(); //获取当前会话,没有则创建一个新的会话 request.getSession(true); request.getSession(false); //获取当前会话,没有则返回null,不会创建新的 session.getId(); //获取sessionID session.isNew(); //当前session是否是新的 session.getMaxInactiveInterval(); //session的非激活间隔时长,默认1800秒 session.setMaxInactiveInterval(); session.invalidate(); //强制让会话立即失效
6.session保存作用域
(1)原理
demo04
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); session.setAttribute("uname","lina"); }
demo05
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Object uname = session.getAttribute("uname"); System.out.println(uname); }
(2)演示
① 使用chrome访问demo04,没有session则创建一个,在容器中加入数据uname,值为lina
② chrome访问demo05,获取到同一个session中的数据lina
③ 使用IE(另一个客户端)访问demo05,获取不到数据
结论:session保存作用域是和具体的某一个session对应的
常用的方法
session.setAttribute(k,v); session.getAttribute(k); session.removeAttribute(k); //移除作用域中的数据
分类:
Java / JavaWeb
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本