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

HTTP是无状态的、有会话的
要想让服务器记住请求的人是谁、发送了几次请求,就要用到cookie
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies
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";
    }

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

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值