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

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.lryc.cn/news/480215.html

相关文章:

  • 深入了解Git、GitHub、GitLab及其应用技巧
  • ctfshow(316,317,318)--XSS漏洞--反射性XSS
  • Visual Studio2022版本的下载与安装
  • nodeJS程序如何引入依赖包
  • 建网站怎么建?只需几个步骤
  • 机器学习课程总结(个人向)
  • 数据分析-43-时间序列预测之深度学习方法GRU
  • Pandas | 数据分析时将特定列转换为数字类型 float64 或 int64的方法
  • Elasticsearch的自定义查询方法到底是啥?
  • Jenkins找不到maven构建项目
  • 怎么更换IP地址 改变IP归属地的三种方法
  • C#-异步查询示例
  • 设计模式之适配器模式(从多个MQ消息体中,抽取指定字段值场景)
  • vue+exceljs前端下载、导出xlsx文件
  • 算法定制LiteAIServer摄像机实时接入分析平台烟火检测算法的主要功能
  • 用 Python 从零开始创建神经网络(二)
  • 嘉吉连续第七年亮相进博会
  • 设计模式之单列模式(7种单例模式案例,Effective Java 作者推荐枚举单例模式)
  • 多个服务器共享同一个Redis Cluster集群,并且可以使用Redisson分布式锁
  • 100种算法【Python版】第59篇——滤波算法之扩展卡尔曼滤波
  • 制造业数字化转型的强大赋能平台:盘古信息IMS OS工软技术底座
  • 域名+服务器+Nginx+宝塔使用SSL证书配置HTTPS
  • UnityAssetsBundle字体优化解决方案
  • Go的环境搭建以及GoLand安装教程
  • git clone,用https还是ssh
  • 量化交易系统开发-实时行情自动化交易-Okex行情交易数据
  • 【重装系统后重新配置2】pycharm 终端无法激活conda环境
  • 【LeetCode每日一题】——802.找到最终的安全状态
  • kafka安装部署--详细教程
  • CMD 查询python 出现 No pyvenv.cfg file 很奇怪 2024/11/9