从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

    • 服务器软件

    • 环境管理和配置管理-科普篇
    • Servlet入门

      • 什么是Servlet
      • Servlet入门案例
      • Servlet生命周期
      • Servlet中的注解
      • Tomcat集成IDEA
      • Servlet体系结构
      • HTTP协议基础
      • 深入request和response对象
      • request对象基本使用
      • request其他功能
      • Servlet实现登录功能
      • HTTP协议基础-响应
      • Response对象基本使用
      • response对象之重定向
      • response输出字符到浏览器
      • response输出字节数据
      • 验证码案例
      • ServletContext
      • 文件下载案例
      • Cookie笔记
      • Cookie的更多细节
        • 一次可不可以发送多个cookie?
        • cookie在浏览器中保存多长时间?
        • cookie能不能存中文?
        • cookie共享问题
        • Cookie的其他特点和作用
      • Cookie实践:记住上次访问时间
      • JSP入门
      • JSP的内置对象和案例
      • IDEA与JavaWeb的小技巧
      • Session笔记
      • 验证码案例
      • JSP深入学习
      • MVC开发模式
      • EL表达式和JSTL标签
      • JSTL标签库
      • 案例:列表的增删改查
      • Filter学习
      • Filter案例
      • Listener学习
      • Java中的Ajax
      • Java中的JSON
      • Servlet
    • JavaWeb
  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • Java
  • JavaWeb
  • Servlet入门
2023-04-17
目录

Cookie的更多细节

# 81.Cookie的更多细节

讲解更多关于Cookie的细节

‍

# 一次可不可以发送多个cookie?

可以。创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。

/**
 * 演示发送多个Cookie
 */
package com.peterjxl.cookie;


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/cookieDemo3")
public class CookieDemo3 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie c1= new Cookie("wife1", "alimiya");
        Cookie c2= new Cookie("wife2", "re");
        resp.addCookie(c1);
        resp.addCookie(c2);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

‍

重启Tomcat,访问http://localhost:8080/hello/cookieDemo3,可以看到服务器发送的响应头包含了多个Cookie

HTTP/1.1 200 OK
set-cookie:msg=hello
set-cookie:msg2=hello2
1
2
3

‍

​​

‍

‍

‍

再次访问,可以看到浏览器发送的请求头中包含了Cookie:

GET / HTTP/1.1 
cooke:msg=hello; msg2=hello2
1
2

​​

‍

‍

# cookie在浏览器中保存多长时间?

默认情况下,当浏览器关闭后,Cookie数据会被销毁,相当于保存在浏览器的内存中。可以自行验证下

如果想要存久一点,可以设置保存的时间:setMaxAge(int seconds)​ ,以秒为单位。例如存储1000秒,可以这样写: cookie1.setManAge(1000);​。

seconds的取值含义:

  • 正数:将Cookie数据写到硬盘的文件中,持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效。
  • 负数:默认值,浏览器一关就删除
  • 零:告诉浏览器,删除cookie信息

‍

我们写个Servlet演示下存储10秒的Cookie

/**
 * 演示Cookie的存储时间
 */
package com.peterjxl.cookie;


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/cookieDemo4")
public class CookieDemo4 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie c1= new Cookie("msg", "time");
        c1.setMaxAge(10);
        resp.addCookie(c1);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

‍

‍

测试:重启Tomcat,访问

  1. 10秒内关闭浏览器,并重新打开,查看Cookie是否还存在
  2. 10秒后是否删除了。

‍

可以在浏览器控制台,等10s后刷新下,可以看到确实没有了

​​

‍

‍

# cookie能不能存中文?

cookie能不能存中文?

  • 在Tomcat8 之前 cookie中不能直接存储中文数据。需要将中文数据转码,一般采用URL编码(%E3)
  • 在Tomcat8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析

‍

/**
 * 演示存储中文Cookie
 */
package com.peterjxl.cookie;


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/cookieDemo5")
public class CookieDemo5 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie c1= new Cookie("msg", "你好");
        resp.addCookie(c1);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

‍

重启,访问

​​

‍

‍

‍

‍

# cookie共享问题

假设在一个Tomcat服务器中,部署了多个web项目,那么在这些web项目中Cookie能不能共享?

  • 默认情况下Cookie不能共享!
  • 可通过 Cookie.setPath(String path)​ 设置Cookie的获取范围。如果不调用这个方法,默认情况下,path的值是当前的虚拟目录
  • 如果要共享,则可将path设置为"/"​

‍

‍

不同的Tomcat服务器间cookie共享问题:

setDomain(String path)​: 如果设置一级域名相同,那么多个服务器之间cookie可以共享。例如 setDomain(".baidu.com")​, 那么tieba.baidu.com​ 和 news.baidu.com​中cookie可以共享

‍

‍

‍

# Cookie的其他特点和作用

Cookie存储数据在客户端浏览器,一般不太安全,容易丢失和被篡改

浏览器对于单个cookie 的大小有限制(4kb), 以及对同一个域名下的总cookie数量也有限制(20个)

‍

Cookie的作用:

  • Cookie一般用于存储少量的不太敏感的数据
  • 在不登录的情况下,完成服务器对客户端的身份识别,例如一些不用登录也能用的功能。

‍

‍

‍

‍

‍

在GitHub上编辑此页 (opens new window)
上次更新: 2023/5/6 21:54:08
Cookie笔记
Cookie实践:记住上次访问时间

← Cookie笔记 Cookie实践:记住上次访问时间→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式