当前位置 博文首页 > RemainderTime:记录(二)Session与cookie的关系和特性详解

    RemainderTime:记录(二)Session与cookie的关系和特性详解

    作者:[db:作者] 时间:2021-07-12 21:45

    Session与cookie区别和特性

    1. 一般片面的说就是 session存储在服务端,cookie存储在客户端
    2. session存储在服务端的tomcat中
    3. cookie是跨域的(比如127.0.0.1和localhost虽然都代表本机,但他们的域名不同,所以请求的接口返回的cookie值也不同)

    Session与cookie关系

    cookie存储的是session ID,前端通过传入cookie中的session id来获取后端存储的session数据

    创建一个springboot项目

    • 生成一个简单的controller层
    1. 创建一个简单的登录接口和获取用户信息接口
    @RestController
    @RequestMapping("/user")
    public class SessionController {
        /**
         * 登录
         * @param userName
         * @param pwd
         * @param session
         * @return
         */
        @GetMapping("/login")
        public String login(@RequestParam String userName, @RequestParam String pwd, HttpSession session){
            session.setAttribute("userName",userName);
            return "登录成功";
        }
        /**
         *获取用户信息
         * @param session
         * @return
         */
        @GetMapping("/info")
        public String info(HttpSession session){
            return "用户名:"+session.getAttribute("userName");
        }
    }
    
    • 运行项目,第一次请求登录接口
      在这里插入图片描述
    • 请求成功,后端将用户名存储在session中
    • 接口响应头则返回了一条cookie(就是session ID)
    • 只有项目成功启动第一次请求响应头会返回cookie,后面再次刷新接口,则cookie在请求头中
      在这里插入图片描述
    1. 再次请求获取数据接口
      在这里插入图片描述
    • 用户信息已经缓存在服务端的session中,在同一个域名 localhost 下 请求接口 之前的cookie则依然会在请求头中,传递给后端接口,并获取session中的数据返回给前端
    1. 我们域名换成 127.0.0.1 再次请求接口
      在这里插入图片描述
    • 响应头返回了 cookie值但返回数据为 null ,因为该域名接口在项目启动后第一次请求,所以响应头带有 cookie。但这之前并没有使用该域名进行请求登录接口,所以服务器端并没有存储 相关信息,则返回null。
      则也验证了cookie是跨域的

    关系流程图

    在这里插入图片描述


    基石是一步一步累计出来的

    cs