安全与加密常识(9)5分钟带你了解经常听到的cookie

Cookie是什么

cookie的中文翻译是曲奇,小甜饼的意思。Cookie(HTTP cookie)是一种服务器存储在用户计算机上的小型数据文件,用于存储特定网站的用户信息。它们通常由网站通过用户的浏览器存储和发送,以便在后续访问中识别用户、记录用户的偏好设置或跟踪用户行为等。

Cookie有什么用

我们想象一个场景,当我们打开一个网站时,如果这个网站我们曾经登录过,那么当我们再次打开网站时,发现就不需要再次登录了,而是直接进入了首页。例如bilibili,csdn等网站。

这里所说的就是会话状态管理。当用户访问一个网站时,服务器可以创建一个包含会话信息的Cookie,然后将该Cookie发送到用户的浏览器。浏览器会将Cookie存储在本地,每次用户与该网站交互时,浏览器都会将Cookie发送回服务器,以便服务器识别用户的会话状态,例如登录状态或购物车内容。

下面展示bilibili网站保存的cookie。

Cookie还常用于跟踪用户的浏览行为,以便向用户展示相关的广告。这些Cookie可以记录用户访问过的网页和搜索内容,从而帮助广告商分析用户的兴趣,并投放更有针对性的广告。

Cookie的表示

一般情况下,cookie是以键值对进行表示的(key-value),例如name=jack,这个就表示cookie的名字是name,cookie携带的值是jack。

Cookie设置过程

具体来说,设置Cookie的步骤如下:

  1. 服务器端设置Cookie: 当服务器需要在客户端保存一个Cookie时,它会在HTTP响应头部中添加Set-Cookie字段。Set-Cookie字段的格式如下:

    Set-Cookie: <cookie-name>=<cookie-value>
    

    可以附加多个可选的属性,例如:

    • Expires=<date>: 指定Cookie的过期时间。
    • Max-Age=<seconds>: 指定Cookie的最大存活时间(秒数)。
    • Domain=<domain>: 指定Cookie的适用域名。
    • Path=<path>: 指定Cookie的适用路径。
    • Secure: 仅在HTTPS连接中发送Cookie。
    • HttpOnly: 限制Cookie只能通过HTTP或HTTPS协议访问,JavaScript无法访问。

    例如,设置一个名为session_id的Cookie,并指定它的过期时间和适用路径:

    Set-Cookie: session_id=abc123; Expires=Wed, 21 Oct 2024 07:28:00 GMT; Path=/
    

  2. 客户端存储Cookie: 当客户端收到带有Set-Cookie头部的响应后,它会将这些Cookie存储起来。在接下来的每次请求中,客户端会自动在请求头部中加入一个Cookie字段,其中包含了所有相关的Cookie数据。

  3. 发送Cookie到服务器: 在每次向服务器发送请求时,客户端会在请求头部中添加一个Cookie字段,将所有的Cookie数据发送给服务器。Cookie字段的格式如下:

    Cookie: <cookie-name>=<cookie-value>; <cookie-name>=<cookie-value>; ...
    

    例如:

    Cookie: session_id=abc123; user_id=12345
    

Cookie的生命周期

cookie有2种存储方式,一种是会话性,一种是持久性。

  • 会话性:如果cookie为会话性,那么cookie仅会保存在客户端的内存中,当我们关闭客服端时cookie也就失效了

    Set-Cookie: name=value; Path=/; HttpOnly;
    
  • 持久性:如果cookie为持久性,那么cookie会保存在用户的硬盘中,直至生存期结束或者用户主动将其销毁。
    cookie我们是可以进行设置的,我们可以人为设置cookie的有效时间,什么时候创建,什么时候销毁。

    Set-Cookie: name=value; Expires=Wed, 21 Oct 2026 07:28:00 GMT; Path=/;
    

相关推荐

  1. 深入了解空三加密

    2024-07-18 03:10:02       23 阅读
  2. 3分钟了解Vue3nextTick()

    2024-07-18 03:10:02       49 阅读
  3. 分钟初步了解人工智能

    2024-07-18 03:10:02       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 03:10:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 03:10:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 03:10:02       58 阅读
  4. Python语言-面向对象

    2024-07-18 03:10:02       69 阅读

热门阅读

  1. Spring源码-读取XML文件配置信息

    2024-07-18 03:10:02       19 阅读
  2. 使用 Django 框架进行开发的基本模板

    2024-07-18 03:10:02       21 阅读
  3. ubuntu安装mininet-wifi

    2024-07-18 03:10:02       20 阅读
  4. VPN介绍

    2024-07-18 03:10:02       20 阅读
  5. Ubuntu下如何设置程序include搜索路径及链接路径

    2024-07-18 03:10:02       24 阅读
  6. 生成式 AI 的发展方向,是 Chat 还是 Agent?

    2024-07-18 03:10:02       25 阅读
  7. Chapter 2: An Introduction to ASP.NET Core in Layman‘s Terms

    2024-07-18 03:10:02       18 阅读
  8. function calling实现调用理杏仁api获取数据

    2024-07-18 03:10:02       23 阅读