• 【servelt原理_14_Session对象】


    Session对象(重点)

    1.Session概述

    • Session用于记录用户的状态。Session是指在一段时间之内,单个客户端与Web服务端的一连串的交互过程。
    • 在一个Session中,客户可能会多次请求访问各种不同的服务器资源

    2.Session原理

    • 服务器会为每一次会话分配一个Session对象
    • 同一浏览器发起的多次请求,同属于一次会话(Session)
    • 首次使用Session时,服务器会自动创建session,并创建Cookie存储SessionId发送回客户端
      在这里插入图片描述
      3.Session的使用
      ①:获取session
    @WebServlet("/ss")
    public class CookieServlet extends HttpServlet{
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		// 1. 通过request对象获取Session对象
    		HttpSession session = req.getSession();
    		// 获取sessionid
    		System.out.println(session.getId());
    	}
    }
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    我们使用浏览器对网站进行访问,我们会发现打印
    在这里插入图片描述
    在浏览器当中会有
    在这里插入图片描述
    当我们关闭浏览器,重新打开访问项目我们会发现session变了
    在这里插入图片描述
    ②:Session保存数据
    setAttribute(“key”, value)保存数据到session中

    session.setAttribute("key", value); //以键值对的形式存储在session当中
    
    • 1

    ③:Session获取数据
    getAttribute(“key”)获取session中的数据

    session.getAttribute("key");  // 通过String类型的key访问Object类型的value
    
    • 1

    ④:Session移除数据
    removeAttribute(“key”)从session中删除数据

    session.removeAttribute("key"); // 通过key值删除session中的值
    
    • 1

    4.Session的生命周期
    开始:第一次使用到session的请求产生则创建session
    结束

    • *浏览器关闭
    • *session超时失效
    • session.setMaxInactiveInterval(interval)
    • *手动销毁失效
    • session.invalidate();

    5.浏览器禁用Cookie后使用Session解决方案
    浏览器在默认情况下,会使用cookie的方式将sessionID发送给浏览器,如果用户禁用Cookie,则sessionID不会被浏览器保存,此时浏览器可以使用URL重写这样的方式发送sessionID

    ①:URL重写
    浏览器在访问服务器上的某个地址时,不在使用原来的地址,而是使用经过该写的地址(在原来的地址上边加上sessionID)

    ②:实现URL重写
    response.encodeRedirectURL(url)

    @WebServlet("/ss")
    public class SetSession extends HttpServlet{
    	
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		HttpSession session = request.getSession();
    		// 重写 URL 追加 SessionID
    		String newUrl = response.encodeRedirectURL("/SecondServlet/gs");
    		System.out.println(newUrl);
    		response.sendRedirect(newUrl);  //重定向到我们要跳转页servlet
    	}
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    @WebServlet("/gs")
    public class GetSession extends HttpServlet{
    	
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		// 1. 通过request对象获取Session对象
    		HttpSession session = req.getSession();
    		// 获取sessionid
    		System.out.println(session.getId());
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    输出
    在这里插入图片描述
    实际情况是我们在url上边加上了sessionID
    在这里插入图片描述

  • 相关阅读:
    新技术之互联网+
    How to add a jar to a project in eclipse?
    抖音小店一周卖了7万多,每天赚2000多,7个步骤教新手如何起店
    【RocketMq 系列】RocketMq 消息重试机制、死信队列
    TikTok对文化艺术的影响:传统与现代的碰撞
    《定时执行专家》日志的解决方案 —— 关于wxLog的使用,附详细代码
    【C++】gnustl_static 与 c++_shared 的区别
    2022-12-6-Cmake工程转VS环境开发
    大数据项目之电商数仓、日志采集Flume测试、日志采集Flume启停脚本
    JSP中include指令的功能简介说明
  • 原文地址:https://blog.csdn.net/edwer93/article/details/128167626