从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实践:记住上次访问时间
      • 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笔记

# 80.Cookie笔记

HTTP是无状态的,那么如何实现保持状态呢?

# 会话技术

什么是会话:一次会话中包含多次请求和响应。浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止(浏览器或服务器)。

会话的功能:在一次会话的范围内的多次请求间,共享数据(HTTP是无状态的,想要共享数据要用会话数据)

生活中用到会话技术的例子:例如网购时,选中多个商品添加到购物车(每次添加都是一个请求);然后点击结算时,又是一个新的请求,如何知道之前的请求有什么数据(也就是用到之前的请求的数据)?使用会话技术。

‍

共享数据有2种方式:

  1. 客户端会话技术:Cookie
  2. 服务器端会话技术:Session

‍

‍

‍

# Cookie快速入门

Cookie的概念:客户端会话技术,将数据保存到客户端

实现原理:

  1. 基于响应头set-cookie和请求头cookie实现。
  2. 浏览器访问服务器后,服务器会返回一些数据给浏览器,并告知浏览器存储到本地;
  3. 当浏览器再次访问服务器的时候,会带上这些Cookie

‍

‍

快速入门步骤:

  1. 创建Cookie对象,绑定数据 new Cookie(String name, String value)​
  2. 发送Cookie对象给浏览器 response.addCookie(Cookie cookie)​
  3. 服务器获取Cookie,拿到数据 Cookie[] request.getCookies()​

注意,Cookie中不能有空格。如果想要存储,可以用URL编解码

‍

我们写个Servlet来发送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("/cookieDemo1")
public class CookieDemo1 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.创建Cookie对象
        Cookie c = new Cookie("msg", "HelloCookie");
        //2.发送Cookie
        resp.addCookie(c);
    }

    @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

‍

重启Tomcat,访问http://localhost:8080/hello/cookieDemo1,就会将Cookie保存到浏览器了,我们可以通过浏览器控制台查看:

​​

‍

‍

# 获取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("/cookieDemo2")
public class CookieDemo2 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //3.获取Cookie
        Cookie[] cs = req.getCookies();
        // 遍历Cookie
        if (cs != null){
            for (Cookie c : cs) {
                System.out.println(c.getName() + " : " + c.getValue());
            }
        }
    }

    @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

‍

重启Tomcat,访问http://localhost:8080/hello/cookieDemo2,可以看到IDE里打印了所有Cookie

msg : HelloCookie
1

‍

注意,Cookie是存储在浏览器里的,如果换个浏览器,Cookie是不会同步到新的浏览器的。

‍

# Cookie原理

Cookie的底层原理:还是通过HTTP协议,设置请求头和响应头来完成

​​

‍

服务器第一次响应:服务器发送的响应头是这样的:

HTTP/1.1 200 OK
set-cookie:msg=HelloCookie
1
2

‍

​​

‍

然后浏览器访问服务器的时候,会将Cookie都带上,发送的请求头内容如下:

GET / HTTP/1.1 
cooke:msg=HelloCookie
1
2

​​

‍

# 总结

会话技术可以使得每次HTTP请求之间共享数据

Cookie是存储在浏览器里的,如果换个浏览器,Cookie是不会同步到新的浏览器的。

‍

在GitHub上编辑此页 (opens new window)
上次更新: 2023/5/6 21:54:08
文件下载案例
Cookie的更多细节

← 文件下载案例 Cookie的更多细节→

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