当前位置: 首页 > article >正文

JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用

JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用

Cookie是一种甜点,同时也是web前端开发中一种非常常见且重要的技术,它用于在客户端服务器之间存储和传递信息。用户身份验证、会话管理,还是用户个性化设置,都离不开Cookie。常见的 Cookie 类型包括由 JavaScript 设置的 Cookie 和由 服务器 生成的 Cookie。虽然它们都叫做 Cookie,但在使用方式、安全性、生命周期等方面有着显著的区别

下面我们将深入探讨这两种 Cookie 的异同.

1. 什么是 Cookie?

Cookie 是浏览器用于存储信息的小型数据片段。当用户访问网站时,服务器可以在浏览器中设置 Cookie,浏览器也会在每次向服务器发送请求时自动携带这些 Cookie。通过 Cookie,网站可以识别用户、保持登录状态,甚至存储用户的偏好设置。

2. JavaScript Cookie 与 服务器生成的 Cookie

2.1 设置来源
  • JavaScript Cookie:由客户端的 JavaScript 代码设置。例如,开发者可以通过 document.cookie 或使用库(如 js-cookie)来操作 Cookie。
  • 服务器生成的 Cookie:由服务器通过 HTTP 响应头中的 Set-Cookie 字段设置。当浏览器从服务器接收到响应时,服务器可以通过该字段将 Cookie 信息发送给客户端。
2.2 访问方式
  • JavaScript Cookie:可以通过 JavaScript 在浏览器中访问。例如,使用 document.cookie 可以获取当前页面的所有 Cookie。通过这种方式,开发者可以方便地读取和修改 Cookie。
  • 服务器生成的 Cookie:这些 Cookie 不能直接被 JavaScript 访问,除非没有设置 HttpOnly 标记()。它们在每次请求时自动由浏览器携带到服务器,确保服务器能够验证用户身份或会话状态。

什么是 HttpOnly

当一个 Cookie 设置了 HttpOnly 标志后,它就变成了一个 仅限 HTTP 访问的 Cookie。这意味着:

  • 浏览器 会自动将 HttpOnly Cookie 随每个 HTTP 请求一起发送给服务器。
  • JavaScript 无法通过 document.cookie 来访问这个 Cookie,从而防止了跨站脚本攻击(XSS)中的恶意脚本窃取 Cookie。
2.3 存储和传递方式
  • JavaScript Cookie:存储在浏览器的 Cookie 存储区,但不会自动随着每次 HTTP 请求一起发送给服务器,除非开发者显式地将其包含在请求头中。例如,在发送 API 请求时,开发者可以手动将 Cookie 放入 Authorization 头部。
  • 服务器生成的 Cookie:存储在浏览器的 Cookie 存储区,并且会自动随每个请求发送给服务器。只要请求的 URL 与 Cookie 的 pathdomain 匹配,浏览器会自动携带 Cookie 数据,从而使服务器能够识别和处理会话信息。
2.4 安全性
  • JavaScript Cookie:由于 JavaScript 可以直接访问 Cookie,因此它们容易受到 跨站脚本(XSS) 攻击。如果网站存在安全漏洞,攻击者可能通过恶意脚本窃取 Cookie 信息。
    • 为了增强安全性,可以通过设置 Secure(仅在 HTTPS 请求中发送)和 SameSite(防止跨站请求伪造攻击)等标志来提高安全性。
    • 设置 HttpOnly 属性可以禁止 JavaScript 访问 Cookie,从而减少被 XSS 攻击的风险。
  • 服务器生成的 Cookie:通过设置 HttpOnly 标记,服务器可以阻止客户端 JavaScript 访问 Cookie,从而增强安全性。只有在 HTTPS 请求中,Secure 标记的 Cookie 才能被发送到服务器,进一步增强安全性。此外,服务器可以使用 SameSite 属性防止 CSRF 攻击。
2.5 存储容量
  • JavaScript Cookie:每个 Cookie 的大小通常限制在 4KB 内,而且同一网站所有的 Cookie 总大小也有限制。因此,JavaScript Cookie 不适合存储大量数据,只能存储一些小型信息,比如用户偏好、主题选择等。
  • 服务器生成的 Cookie:虽然同样有大小限制(通常为 4KB),但是服务器通常不会存储大量数据。服务器生成的 Cookie 一般用于存储会话标识符、用户认证令牌等小型数据。
2.6 作用范围
  • JavaScript Cookie:通过设置 pathdomain 属性,JavaScript Cookie 可以控制它的作用范围。可以通过这些属性限制 Cookie 只在特定路径或域名下有效。
  • 服务器生成的 Cookie:与 JavaScript Cookie 类似,服务器生成的 Cookie 也可以通过 pathdomain 属性来设置作用范围。例如,path=/ 表示该 Cookie 在整个网站范围内有效,而 path=/admin 则限制在特定路径下有效。
2.7 生命周期
  • JavaScript Cookie:可以通过 expiresmax-age 属性来控制 Cookie 的有效期。如果没有设置有效期,Cookie 将成为会话 Cookie,并在浏览器会话结束时删除。
  • 服务器生成的 Cookie:同样可以通过 expiresmax-age 属性来控制 Cookie 的过期时间。没有设置过期时间时,Cookie 也是会话 Cookie,浏览器关闭后会自动删除。

3. 如何选择合适的 Cookie 类型?

3.1 使用 JavaScript Cookie

JavaScript Cookie 更适合用来存储一些不敏感、非安全的数据。例如:

  • 用户界面设置(主题、语言偏好等)
  • 本地存储(例如购物车内容、表单数据)
  • 临时性的数据(如弹窗的显示状态)
3.2 使用服务器生成的 Cookie

服务器生成的 Cookie 通常用于存储敏感信息,特别是在涉及身份验证和会话管理时。例如:

  • 用户身份认证(如登录令牌)
  • 会话管理(如用户登录状态)
  • 安全性要求较高的设置(如 HttpOnlySecure

4. 总结

JavaScript Cookie 与服务器生成的 Cookie 在工作方式、存储和访问安全性上有着显著的区别。JavaScript Cookie 数据不会自动随着每次 HTTP 请求一起发送给服务器;而服务器生成的 Cookie 更安全,适用于身份认证、会话管理等敏感信息的存储。


http://www.kler.cn/a/389940.html

相关文章:

  • vue3项目中内嵌vuepress工程两种实现方式
  • 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同?
  • learn-F12 Performance(性能)前端性能分析(LCP,CLS,INP)
  • DAY6 线程
  • 后端:Aop 面向切面编程
  • Node.Js+Knex+MySQL增删改查的简单示例(Typescript)
  • vue的原理
  • Docker 的常用命令有哪些?
  • Python实现SPFA算法
  • 浏览器交互事件汇总
  • 97_api_intro_imagerecognition_pdf2word
  • GEE ui界面实现:用户自画多边形, 按面积比例在多边形中自动生成样点,导出多边形和样点shp,以及删除上一组多边形和样点(有视频效果展示)
  • 数据库设计——E-R 图,学习笔记
  • 探索Copier:Python项目模板的革命者
  • 【软考系统架构设计师论文】论面向服务的架构设计
  • 11.9.2024刷华为
  • 基于SSM(Spring + Spring MVC + MyBatis)框架的汽车租赁共享平台系统
  • 渗透测试---python基础:基础语法的使用
  • 嵌入式系统的利器C++
  • 一、HTML
  • 网络初阶——应用层:HTTPS 协议
  • 【初阶数据结构与算法】线性表之链表的分类以及双链表的定义与实现
  • 【C#设计模式(3)——抽象工厂模式(Abstract Factory Pattern)】
  • 弱口令整改方案:借助双因子认证加强账号密码安全
  • CKA认证 | Day1 k8s核心概念与集群搭建
  • 【layui】echart的简单使用