Community项目--会话管理

会话管理

1.HTTP基本性质
  • HTTP是简单的
  • HTTP是可扩展的
  • HTTP是无状态的
    • 无状态指的是在同一个连接中,两个执行成功的请求之间是没有关系的。这就带来了一个问题,用户没有办法在同一个网站中进行连续的交互,也就是是指协议对于交互性场景没有记忆能力,每个请求都是新的。
    • 举个栗子:当用户在进行网上购物时,通过登录验证了他是否是一个合法用户,然后跳转到了商品页面,可当用户进行购买操作时,服务器忘记了这个用户到底有没有经过验证。然后用户只能在添加商品时还是需要将重新将账号密码以及品信息一起提交给服务器。
    • 而使用HTTP的头部扩展,HTTP Cookies就可以解决这个问题。把Cookies添加到头部中,创建一个会话让每次请求都能共享相同的上下文信息,达成相同的状态。
      注意,HTTP本质是无状态的,使用Cookies可以创建有状态的会话。
2.Cookie简单介绍
  • Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。
  • Cookie 的生命周期可以通过两种方式定义:
    • 会话期 Cookie 是最简单的 Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。
    • 持久性 Cookie 的生命周期取决于过期时间(Expires)或有效期(Max-Age)指定的一段时间
      在这里插入图片描述
    // cookie示例
    @GetMapping("/cookie/set")
    @ResponseBody
    public String setCookie(HttpServletResponse response){
        // 创建cookie
        Cookie cookie = new Cookie("code", UUID.randomUUID().toString().replaceAll("-", ""));
        // 设置生效范围
        cookie.setPath("/community/alpha");
        // 设置cookie生存时间
        cookie.setMaxAge(60 * 10);
        // 发送cookie
        response.addCookie(cookie);

        return "set Cookie";
    }

在这里插入图片描述

  @GetMapping("/cookie/get")
    @ResponseBody
    public String getCookie(@CookieValue("code") String code){
        System.out.println(code);
        return "get Cookie";
    }

在这里插入图片描述
控制台

  • 缺点
    • 数据存到客户端,安全性不能保证
    • 由于服务器指定 Cookie 后,浏览器的每次请求都会携带 Cookie 数据,会带来额外的性能开销
3.session
  • 这里所说的session是为了绕开Cookie的各种限制的一种更高级的会话状态实现。
  • 是JavaEE标准,用于在服务端记录客户端信息。虽然数据存放在服务端更加安全,但是也会增加服务端的内存压力。
  • 用户访问服务器时,服务器会创建一个session对象,然后返回给浏览器一个sessionId,并且把sessionId保存在Cookie上,当用户再次访问服务器时,会带着sessionId,服务器就会匹配用户在服务器上的session,根据session中的数据,还原用户上次的浏览状态。
    在这里插入图片描述
    // session示例
    @GetMapping("/session/set")
    @ResponseBody
    public String setSession(HttpSession  session){
        session.setAttribute("id", 1);
        session.setAttribute("name", "Test");
        return "set session";
    }

在这里插入图片描述

   @GetMapping("/session/get")
    @ResponseBody
    public String getSession(HttpSession  session){
        System.out.println(session.getAttribute("id"));
        System.out.println(session.getAttribute("name"));
        return "get session";
    }

在这里插入图片描述
在这里插入图片描述

4.未完成

粘性session
同步session
共享session

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值