JavaWeb

1 Session‌和‌Cookie‌

Session‌和‌Cookie‌是两种用于维持客户端与服务器之间状态的机制。

1.1 Cookie‌的原理

  1. 浏览器发http请求

  2. 服务端响应HTTP,响应的HTTP协议的响应头中,服务端设置有Set-Cookie

  • 服务端域名:www.a.com
  • 代码
Cookie userCookie = new Cookie("username", "zhangsan");
userCookie.setMaxAge(1800); // 设置过期时间为1小时
userCookie.setPath("/"); // 设置路径
response.addCookie(userCookie); // 发送给浏览器
  • 响应头
Set-Cookie: username=zhangsan;Max-Age=1800;Path=/;
  • domain默认是 www.a.com 。如果是从chat.a.com发出请求,浏览器不会捎带该cookie
  1. 浏览器保存响应头
  2. 浏览器再次请求服务器,捎带cookie
  • http请求报文:
Cookie:username=zhangsan
  1. 服务端获取cookie
      Cookie[] cookies = request.getCookies();
      for (Cookie cookie : cookies) {
           if(cookie.getName().equals("username")){
                String s=cookie.getValue();    
                break;
           }
     }

1.2 Session‌原理

Session‌基于Cookie

  1. 浏览器发http请求

  2. 服务端代码里调用,有创建Session对象的效果的方法,Web容器(一般是TomCat)会创建Cookie和Session对象

  • 代码
request.getSession();
//或者下面的代码
request.getSession(true);

TomCat会执行下面的过程

伪码分析:
1.第一次访问创建Session对象,给Session对象分配一个唯一的ID,叫JSESSIONID。

new HttpSession();

2.把JSESSIONID作为Cookie的值发送给浏览器保存

Cookie cookie = new Cookie("JSESSIONID", "abc123def456");
userCookie.setMaxAge(1800); // 设置过期时间为1小时
userCookie.setPath("/"); // 设置路径
response.addCookie(cookie);
  • 响应头
Set-Cookie: JSESSIONID=abc123def456; Max-Age=1800; Path=/;
  • domain默认是 www.a.com 。如果是从chat.a.com发出请求,浏览器不会捎带该cookie
  1. 浏览器保存响应头
  2. 浏览器再次请求服务器,捎带cookie
  • http请求报文:
Cookie:JSESSIONID=abc123def456
  1. 服务端获取Session
  HttpSession session = request.getSession();  
  //设置session信息,以便进行相关的业务
  session.setAttribute("name","eric");

1.3 过期时间

1.3.1 Max-Age

Cookie 的有效期(秒)。指的是浏览器保存这串cookie的时长,超过了,浏览器销毁之。

  • 举例说明:Max-Age为1800秒,过了1800秒,浏览器就销毁。

1.3.2 MaxInactiveInterval

动态设置当前 HTTP 会话(HttpSession)的非活动超时时间‌,单位为‌秒

  • 举例说明
    session.setMaxInactiveInterval(60); // 60秒
时间 用户在做什么 计时器状态 Session 状态
09:00:00 登录成功 开始计时 60 秒 有效
09:00:30 点击"个人中心" 重置为 0,重新计 60 秒 有效
09:01:10 点击"订单列表" 重置为 0,重新计 60 秒 有效
09:01:50 点击"商品详情" 重置为 0,重新计 60 秒 有效
09:05:00 点击"购物车" 超过 60 秒 已经销毁了
  • 用户每点一次页面,倒计时就会清零重新开始。
  • 只有用户完全不操作、不请求服务器,连续超过 60 秒,Session 才会被销毁。

1.4 Domain和Path

Domain,哪个域名可以访问
Path,该域名下哪些路径可以访问

1.4.1 举例说明

2.Domain设置为*.a.com

场景 行为
同域名访问 Cookie 正常发送
子域名访问(如 api.a.com Cookie 正常发送

1.默认Domain是当前Host,比如www.a.com

posted @ 2026-04-23 22:29  dvdhellohaha  阅读(11)  评论(0)    收藏  举报