Cookie

Cookie

概念

  1. Cookie是客户端会话技术,将数据保存到客户端。默认情况下:只要浏览器不关闭,用户再次发送请求的时候,会自动将运行内存中的cookie发送给服务器。
  2. cookie保存方式
    • 可以保存在运行内存中。(浏览器只要关闭cookie就消失了。)
    • 可以保存在客户端硬盘文件中。(设置保存时间)

快速入门

  1. 使用步骤:
  • 创建Cookie对象,绑定数据
    new Cookie(String name, String value)

  • 设置cookie的path(cookie关联的路径):setPath(String path);

  • 发送Cookie对象
    response.addCookie(Cookie cookie)

  • 获取Cookie,拿到数据
    Cookie[] request.getCookies()
    获取cookie的键值对
    Stringname = cookie.getName();

    String value = cookie.getValue();

  1. 实现原理

    基于响应头set-cookie和请求头cookie实现

  2. cookie的细节

    一次可以设置多个cookie

    cookie可以在浏览器存储多次时间
    默认情况下:当浏览器关闭后,Cookie销毁

    持久化存储:
    cookie.setMaxaAge(int seconds)设置cookie的存储时间。

    • 正数:将cookie数据存储到硬盘中,并按指定的时间存储,时间到后自
      销毁。
    • 0:删除同名cookie信息
    • 负数(默认情况):当浏览器关闭时自动清除
  3. cookie能不能存中文?

    • 在tomcat 8 之前 cookie中不能直接存储中文数据:需要将中文数据转码—一般采用URL编码(%E3)
    • 在tomcat 8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析
      编码:URLEncoder.encode(formatDate, "utf-8");(formatDate:要编码的数据)
      解码:URLDecoder.decode(value, "utf-8");(value:要解码的数据)
  4. cookie共享问题?

    1. 假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?
      • 默认情况下cookie不能共享。
      • setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录,当前项目下所有路径共享。
      • 如果要实现Tomcat中多个web项目共享,则可以将path设置为"/"。
  5. 不同的tomcat服务器间cookie共享问题?

    • setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享

    • setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享

Cookie的特点和作用

  1. cookie存储数据在客户端浏览器.
  2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)

作用:

  1. cookie一般用于存出少量的不太敏感的数据。
  2. 在不登录的情况下,完成服务器对客户端的身份识别。

案例(十天内免登陆)

部分代码

创建cookie:

//创建cookie对象
Cookie cookie1 = new Cookie("username", username);
Cookie cookie2 = new Cookie("password", password);
//设置cookie的存储时间
cookie1.setMaxAge(60 * 60 * 24 * 10);
cookie2.setMaxAge(60 * 60 * 24 * 10);
//设置cookie的path (只要访问这个应用,浏览器就会携带连个cookie对象)
cookie1.setPath(request.getContextPath());
cookie2.setPath(request.getContextPath());
//相应cookie对象给浏览器
response.addCookie(cookie1);
response.addCookie(cookie2);

删除cookie:

//清除存储的登录信息
Cookie[] cookies = request.getCookies();
if (cookies != null){
    for (Cookie cookie : cookies) {
        String name = cookie.getName();
        if ("username".equals(name) || "password".equals(name)){
            cookie.setMaxAge(0);//删除同名cookie
            cookie.setPath(request.getContextPath());//必须设置(创建cookie时关联的路径)
            response.addCookie(cookie);//必须发送cookie
        }
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值