session总结

HttpSession接口

介绍

HttpSession接口是Servlet规范下的子接口。存在于Tomcat中servlet-api.jar中。

如果两个Servlet来自于同一个网站,并且为同一个浏览器/用户服务,此时借助于HttpSession对象进行数据共享。

(是类似于Cookie的!)

HttpSession与Cookie的区别

  1. 存储位置:

    Cookie存放在客户端计算机(缓存或硬盘)

    HttpSession存放在服务端计算机内存

  2. 数据类型:

    Cookie对象存储共享数据类型只能是String类型

    HttpSession对象可以存储任意类型的共享数据(Object)

  3. 数据数量:

    一个Cookie对象只能存储一个共享数据(一个键值对)

    HttpSession使用map集合存储共享数据,所以可以存储任意数量的数据。

  4. 参照物:

    Cookie对象相当于【会员卡】

    HttpSession对象相当于【存储柜】

命令实现

// 在同一个网站下,OneServlet向TwoServlet传送数据
OneServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        // 1. 调用请求对象获取用户参数
        String foodName = request.getParameter("foodName");
        // 2. 调用请求对象,向Tomcat申请开辟session空间
        HttpSession session = request.getSession();
        // 3. 将数据添加到session
        session.setAttribute("key1", 共享数据);
    }
}

// 浏览器访问 /myWeb下TwoServlet
TwoServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        // 1. 调用请求对象,向Tomcat申请开辟session空间
        HttpSession session = request.getSession();
        // 2. 从会话作用域对象得到OneServlet提供的共享数据
        Object 共享数据 = session.getAttribute("key1");
    }
}

Http服务器如何将用户与HttpSession关联

利用Cookie

getSession() 与 getSession(false)

getSession():当在服务端中存在了该用户的【储物柜】,tomcat将其直接返回;如果不存在,则创建【储物柜】

getSession(false): 当在服务端中存在了该用户的【储物柜】,tomcat将其直接返回;

​ 如果不存在,tomcat会返回null,不会进行创建。

HttpSession的销毁时机

  1. 用户与HttpSession关联的时候,使用的cookie只能存放在浏览器缓存中。
  2. 在浏览器关闭时,意味着用户与其HttpSession断开联系。
  3. 由于tomcat无法检测浏览器何时关闭,因此在浏览器关闭时,并不会导致tomcat将浏览器关联的HttpSession销毁。
    时,意味着用户与其HttpSession断开联系。
  4. 由于tomcat无法检测浏览器何时关闭,因此在浏览器关闭时,并不会导致tomcat将浏览器关联的HttpSession销毁。
  5. 为了解决这个问题,tomcat为每一个HttpSession对象设置【空闲时间】,默认为30min,若30min仍未操作,则会销毁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值