• Cookie 入门


    • 位于 javax.servlet.http 包下
    1. 关于 Cookie

      • Cookie 是 HTTP 协议制定的!先由服务器保存 Cookie 到浏览器, 在下次浏览器请求服务器时,
        浏览器把上一次请求得到的 Cookie 归还给服务器;
      • Cookie 的内容是一个键值对, 服务器保存 Cookie 的响应头:
        Set-Cookie: aaa=AAA Set-Cookie: bbb=BBB
      • 浏览器归还 Cookie 的请求头: Cookie: aaa=AAA; bbb=BBB
    2. HTTP 协议规定(为了保证不给浏览器太大压力):

      • 1个Cookie最大 4KB;
      • 1个服务器最多向 1 个浏览器保存 20 个 Cookie;
      • 1个浏览器最多可以保存 300 个Cookie
    • 服务器使用 Cookie 来跟踪客户端状态;
    1. 原始方式
      • 使用 response 发送 Set-Cookie 响应头;
      • 使用 request 获取 Cookie 请求头;
    2. 便捷方式
      • 使用 response.addCookie() 方法向浏览器保存 Cookie;
      • 使用 request.getCookies() 方法获取浏览器归还的 Cookie, 返回 Cookie[];
        如果一个Cookie 也没有, 返回 null.
    // 示例:
    // 保存 cookie, 需要首先创建 cookie 对象
    Cookie ck2 = new Cookie("aaa","bbb");
    response.addCookie(ck2);
    
    // 获取 cookie
    Cookie[] cookies = request.getCookies();
    if(cookies != null){
        for(Cookie c : cookies){
            out.print(c.getName+"="+c.getValue()+"<br/>");
        }
    }
    
    1. Cookie 不只有 name 和 value 两个属性;
    2. Cookie 的 maxAge:
      • Cookie 的最大生命, 即 Cookie 可保存的最大时长, 以秒为单位. 使用 Cookie.setMaxAge(); 设置;
      • maxAge>0 : 浏览器会把 Cookie 保存到客户端硬盘上, 有效时长为 maxAge 的值决定;
      • maxAge<0 : Cookie 只在浏览器内存中存在, 当用户关闭浏览器时, 浏览器进程结束,
        同时 Cookie 也就死亡了; 该值为 Cookie 的默认设置;
      • maxAge=0 : 浏览器会马上删除这个 Cookie, 也就是为了删除浏览器存在的同名 Cookie;
    3. Cookie 的 path:
      • Cookie 的 path 并不是设置这个 Cookie 在客户端的保存路径!!!
      • Cookie 的 path 由服务器创建 Cookie 时设置;
      • 当浏览器访问服务器某个路径时, 需要归还哪些 Cookie 给服务器呢? 这是由 Cookie 的 path 决定;
      • 浏览器访问服务器的路径, 如果包含某个 Cookie 路径, 那么就归还这个 Cookie
      • Cookie 的 path 默认值: 当前访问路径的父路径, 例如在访问 /day11_1/jsps/a.jsp 时,
        响应的 cookie, 默认的 path 为 /day11_1/jsps;
    // aCookie.path = /day11_1/; bCookie.path=/day11_1/jsps/; cCookie.path=/day11_1/jsps/cookie;
    // 访问: /day11_1/index.jsp 时, 归还: aCookie
    // 访问: /day11_1/jsps/a.jsp 时, 归还: aCookie, bCookie
    // 访问: /day11_1/jsps/cookie/b.jsp 时, 归还: aCookie, bCookie, cCookie
    
    • domain 用来指定 Cookie 的域名!! 当多个二级域中共享 Cookie 时才有用.
    • 例如: www.baidu.com zhidao.baidu.com news.baidu.com tieba.baidu.com 之间共享 Cookie 时,
      可以使用 domain;
    • 设置domain为: cookie.setDomain(".baidu.com");
    • 设置 path 为: cookie.setPath("/");

    **参考资料:** - [JavaWeb 视频教程](https://www.bilibili.com/video/av12764736/#page=7) - [JavaEE 6.0 文档](http://tool.oschina.net/apidocs/apidoc?api=javaEE6)
  • 相关阅读:
    typeid抛出异常的解释
    [原创]公平数的解法
    [原创]我的北大ACM POJ 1012解答
    [原创]我的PKU ACM POJ1029题解
    asp.net 单用户登录经典解决方案
    [转]SQL事务回滚的问题及其解决的方法
    获取json数据
    js中Date对象的用法
    解决刷新后回到顶部的问题
    C#获取客户端及服务器端主机信息
  • 原文地址:https://www.cnblogs.com/linkworld/p/7590311.html
Copyright © 2020-2023  润新知