【SpringBoot学习】05、用cookie和session做会话管理

HTTP是无状态的、有会话的 要想让服务器记住请求的人是谁、发送了几次请求,就要用到cookie cookie有点像身份证,浏览器第一次访问服务器时,服务器给浏览器发送一个身份证(cookie),浏览器存在本地,当浏览器再次访问服务器时带上身份证(cookie),服务器就知道浏览器是谁了

1 cookie

1.1 服务器给初次访问的浏览器发cookie

//测试服务器给浏览器发送cookie
    @RequestMapping(path = "/cookie/set",method = RequestMethod.GET)
    @ResponseBody
    public String setCookie(HttpServletResponse response){
          
   
        Cookie cookie = new Cookie("code",CommunityUtil.generateUUID());
        cookie.setPath("/community");
        cookie.setMaxAge(60*10);//不设置生存时间的话,默认关闭浏览器cookie就消失,设置的话浏览器会存到本地
        response.addCookie(cookie);
        return "set cookie success";
    }

对比不设置cookie的

//对比不设置cookie的
    @RequestMapping(path = "/nocookie",method = RequestMethod.GET)
    @ResponseBody
    public String noCookie(){
          
   
        return "no cookie";
    }

1.2 浏览器再次访问服务器时带上cookie

再次访问时浏览器带上了cookie

@RequestMapping(path = "/cookie/get",method = RequestMethod.GET)
    @ResponseBody
    public String getCookie(@CookieValue("code") String code){
          
   
        System.out.println(code);
        return "get cookie";
    }

得到了cookie(值不一样是因为这是分两次做的,上一个cookie过期了)

1.3 cookie的特点

优: cookie可以弥补HTTP无状态的特点 缺: cookie存在客户端,没有安全性 cookie需要发送给服务端,占用流量

2 session

JavaEE的标准 在服务端记录客户端的信息,与cookie正好相反,cookie是存在客户端的 缺点:session存在服务端,占用内存

session工作原理:浏览器第一次访问服务器时,服务器生成一个session用于标识该浏览器,服务器返回给浏览器的响应中带了cookie,cookie中带了session id,浏览器把cookie存在本地,下次访问时带上cookie,服务器通过cookie中的session id标识浏览器

2.1 服务器给第一次访问的浏览器创建session,并用cookie传回session id

//session示例
    @RequestMapping(path = "session/set",method = RequestMethod.GET)
    @ResponseBody
    public String setSession(HttpSession session){
          
   
        session.setAttribute("id", 1);
        session.setAttribute("name","test");
        return "set session";

    }

浏览器访问服务器其他页面时也会带上session id

2 服务器从浏览器的请求中得到cookie->session id->session->从而标识浏览器

@RequestMapping(path = "session/get",method = RequestMethod.GET)
    @ResponseBody
    public String getSession(HttpSession session){
          
   
        System.out.println(session.getAttribute("id"));
        System.out.println(session.getAttribute("name"));
        return "get session";
    }
经验分享 程序员 微信小程序 职场和发展