Cookie 的技术学习笔记

前言:本篇学习笔记 来自B站动力节点官方号的 reyco老师的Servlet的视频中的笔记和结论

一、 Cookie简介

  Cookie 是由 网景公司前雇员在 1993年发明的一种进行网络会话状态跟踪的技术。

  会话是由一组请求响应组成,是围绕一件相关的事情所进行的请求与相应。所以这些请求与响应之间是一定有数据传递的,即需要进行会话跟踪的。然而 HTTP 协议是一种无状态协议,在不同的请求间 是无法进行数据传递的。此时需要一种可以进行请求间数据传递的会话跟踪技术。

  Cookie 是由服务器生成,保存在客户机的一种信息载体。这个载体中存放在用户访问该站点的会话状态信息。只要 cookie 没有被清除,或者 cookie 没有失效,那么存放在其中的会话状态就有效。

  用户在提交第一次请求后,由服务器生成 cookie ,并将其装到 响应头中 response,以响应的形式发送给客户端,客户端在收到响应后,将 cookie 保存到客户端,当客户端再次发送同类请求后,在请求中会携带保存在客户端 的 cookie 数据,再次发送到服务端,服务端接受到相同同的状态信息(cookie)并识别,服务端即可对对话进行跟踪。

  Cookie 技术并不是 javaweb 开发的专属技术,而属于 web开发的专属技术,是所有 web 开发语言均支持的技术

  Cookie 是由若干键值对构成,这里的键——一般称为 name ,值称为 value。Cookie 的 键和值 均为 字符串

二、火狐浏览器下查看 Cookie
  不同的浏览器,其 Cookie 的保存位置及查看方式不一样,删除某一浏览器下的 cookie ,不会影响到其他浏览器的 cookie

火狐浏览器(版本35.0.1)可以直接看到 cookie的内容,查看位置在:(选项—>隐私—>移除单个 Cookie)

  

  

 

三、JAVAEE中 Cookie
  在 Javaee 中的 javax.servlet.http 包中存在一个类 Cookie,就是用于完成会话跟踪的 Cookie。其中只有一个带参构造器:
    public Cookie(String name,String value)

  而 httpServletResponse 中有一个方法,可以将 Cookie 添加到 相应头中:
    public void addCookie(Cookie cookie)

  注意,一个response 中可以添加多个 Cookie 键值对。

   

  1)创建 Cookie  

    Cookie cookie1 = new Cookie("username","chens");
    Cookie cookie2 = new Cookie("username","chens");

  2)默认绑定路径
    访问路径由资源名称与资源路径构成。默认情况下,Cookie 与访问路径中的资源路径绑定,只要用户发出带有绑定资源路径(等同于同类请求)的请求,则在请求头部,将自动携带 与之绑定的 Cookie 数据

  3)自定义路径
    通过Cookie 类中的方法 public void setPath(String path) ,设置指定路径

    //注意:这里指定的路径必须加上项目名称
    cookie1.setPath(request.getContextPath() + "/xxx/ooo/some");
    cookie2.setPath(request.getContextPath() + "/aaa");

  

  4)设置Cookie的保存时长,单位为秒

    //注意:时长=0或<0时或未指定时,规定在会话结束是失效
    Cookie1.setMaxAge(60*60)//一小时

 

  5)将 Cookie 添加到响应头

    Response.addCookie(cookie1);
    Response.addCookie(cookie2);

运行结果:
  访问你的servlet,并且用火狐查看cookie

  

  值得注意的是,passward(cookie2)没有指定 cookie 保存时间默认在会话结束失效。

  6)接收 Cookie 

    当访问到 Cookie 指定路径时,Cookie将会被包装request中,我们可以通过 request 中的 getCookie 获取到
  在相同项目中另一个servlet获取到传输过来的cookie

    //获取 cookie
    Cookie[] cookies = request.getCookies();
    //遍历 cookie
    for(Cookie cookie:cookies) {
        System.out.println(cookie.getName() + cookie.getValue());
    }

  好了,本篇的学习结束

原文地址:https://www.cnblogs.com/melonPada/p/13196760.html