javaWeb 客户端会话跟踪技术-Cookie

  • 存储位置:客户端浏览器

  • 设置时机:在浏览器第一次发起请求来请求服务器的时候,在服务器端来设置一个cookie。

  • 存储信息:存储用户相关的一些数据信息。如在 cookie 当中来存储当前登录用户的用户名,用户的ID。

  • 执行流程:服务器端在给客户端在响应数据的时候,会自动的将 cookie 响应给浏览器,浏览器接收到响应回来 的 cookie 之后,会自动的将 cookie 的值存储在浏览器本地。接下来在后续的每一次请求当中, 都会将浏览器本地所存储的 cookie 自动地携带到服务端在这里插入图片描述

    接下来在服务端我们就可以获取到 cookie 的值。我们可以去判断一下这个 cookie 的值是否存 在,如果不存在这个cookie,就说明客户端之前是没有访问登录接口的;如果存在 cookie的值,就 说明客户端之前已经登录完成了。这样我们就可以基于 cookie 在同一次会话的不同请求之间来共享数据。

  • 3个自动

    • 服务器会 自动 的将 cookie 响应给浏览器。
    • 浏览器接收到响应回来的数据之后,会 自动 的将 cookie 存储在浏览器本地。
    • 在后续的请求当中,浏览器会 自动 的将 cookie 携带到服务器端
  • 自动化进行的原因

    • cookie 它是 HTTP 协议当中所支持的技术,而各大浏览器厂商都支持了这一标准。

    • 在 HTTP协议官方给提供了一个响应头和请求头:在这里插入图片描述

      • 响应头 Set-Cookie :设置Cookie数据的
      • 请求头 Cookie:携带Cookie数据的
  • 优缺点

    • 优点:HTTP协议中支持的技术(像Set-Cookie 响应头的解析以及 Cookie 请求头数据的携带,都是浏览器自动进行的,是无需我们手动操作的)
    • 缺点:
      • 移动端APP(Android、IOS)中无法使用Cookie
      • 不安全,用户可以自己禁用Cookie
      • Cookie不能跨域
  • 【跨域介绍】

    • 区分跨域的维度:协议,ip,端口有任何一个维度不同,那就是跨域操作

    • [协议不同,跨域]
      http://192.168.150.200/login.html ---------> https://192.168.150.200/login     
      [IP不同,跨域]
      http://192.168.150.200/login.html ---------> http://192.168.150.100/login     
      [端口不同,跨域]
      http://192.168.150.200/login.html ---------> http://192.168.150.200:8080/login 
      [不跨域] 
      http://192.168.150.200/login.html ---------> http://192.168.150.200/login     
      

代码测试

  • 响应头 Set-Cookie :设置Cookie数据

    创建Cookie对象

    new Cookie("name","value");
    

    将Cookie对象添加到HttpServletResponse对象中

    HttpServletResponse对象.addCookie(cookie对象);
    

    代码演示

    	//设置Cookie
        @GetMapping("/c1")
        public Result cookie1(HttpServletResponse response){
            //设置Cookie/响应Cookie
            response.addCookie(new Cookie("login_username","itheima")); 
            return Result.success();
        }
    

    设置的cookie,通过响应头Set-Cookie响应给浏览器,并且浏览器会将Cookie,存储在浏览器端。

    在这里插入图片描述

  • 请求头 Cookie:携带Cookie数据的

    获取Cookie对象

    HttpServletRequest对象.getCookies();  //返回的是Cookie[]
    

    通过Cookie对象的name和value属性获取

    Cookie对象.getName(); //返回String字符串
    Cookie对象.getValue(); //返回String字符串
    

    代码演示

    //获取Cookie
    @GetMapping("/c2")
    public Result cookie2(HttpServletRequest request){
            Cookie[] cookies = request.getCookies();
            for (Cookie cookie : cookies) {
                if(cookie.getName().equals("login_username")){
                    ///输出name为login_username的cookie
                    System.out.println("login_username: "+cookie.getValue()); 
                }
            }
            return Result.success();
        }
    

    访问c2接口 http://localhost:8080/c2,此时浏览器会自动的将Cookie携带到服务端,是通过请求头Cookie,携带的在这里插入图片描述

参考文献:黑马javaWeb视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值