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.rhkb.cn/news/470092.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重新认识HTTPS

一. 什么是 HTTPS HTTP 由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随意使用一个抓包工具都可以截获通信的内容。 所以安全上存在以下三个风险: 窃听风险,比如通信链路上可以获取通信…

pycharm快速更换虚拟环境

目录 1. 选择Conda 虚拟环境2. 创建环境3. 直接选择现有虚拟环境 1. 选择Conda 虚拟环境 2. 创建环境 3. 直接选择现有虚拟环境

AI生活之我用AI处理Excel表格

AI生活之我用AI处理Excel表格 场景再现AI提问词AI代码运行调试结果心得感受 场景再现 因学习需要,整理了某个题库,方便自己刷题使用。 已将每套题打上了制定标签,得到一个Excel表格。截图如下: 需求是:一共35套题&…

Cesium加载大量点数据卡顿处理办法

1.使用entity绘制随机点 // 随机生成 1000 个点 const numPoints 1000;for (let i 0; i < numPoints; i) {const lon Math.random() * 360 - 180;const lat Math.random() * 180 - 90;const height 50000 Math.random() * 5000;// 将点添加到 Cesium Viewer 中viewer…

SCUI Admin + Laravel 整合

基于 Vue3 和 Element Plus 和 Laravel 整合开发 项目地址&#xff1a;持续更新 LaravelVueProject: laravel vue3 scui

DAY6 线程

作业1&#xff1a; 多线程实现文件拷贝&#xff0c;线程1拷贝一半&#xff0c;线程2拷贝另一半&#xff0c;主线程回收子线程资源。 代码&#xff1a; #include <myhead.h> sem_t sem1; void *copy1()//子线程1函数 拷贝前一半内容 {int fd1open("./1.txt",O…

Docker入门系列——Docker-Compose

Docker Compose 是 Docker 官方编排工具&#xff0c;用于定义和运行多容器 Docker 应用程序。它是一个轻量级的工具&#xff0c;用于快速配置和启动应用程序的不同服务。 Docker Compose 是什么 Docker Compose 最初是由 Docker 公司开发&#xff0c;并于 2014 年 6 月首次发布…

实战指南:理解 ThreadLocal 原理并用于Java 多线程上下文管理

目录 一、ThreadLocal基本知识回顾分析 &#xff08;一&#xff09;ThreadLocal原理 &#xff08;二&#xff09;既然ThreadLocalMap的key是弱引用&#xff0c;GC之后key是否为null&#xff1f; &#xff08;三&#xff09;ThreadLocal中的内存泄漏问题及JDK处理方法 &…

Java基础-组件及事件处理(下)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 面板组件 说明 常见组件 JScrollPane常用构造方法 JScrollPane设置面板滚动策略的方法 JScrollPane滚…

HarmonyOS ArkTS 下拉列表组件

Entry Component struct Index {defaultValue: string 下拉列表;// 定义选项数组&#xff0c;包含 value 和可选的 labeloptions: Array<SelectOption> [{ value: aaa },{ value: bbb },{ value: ccc },{ value: ddd },{ value: eee },{ value: fff },{ value: ggg },{…

第8章 利用CSS制作导航菜单

8.1 水平顶部导航栏 水平莱单导航栏是网站设计中应用范围最广的导航设计&#xff0c;一般放置在页面的顶部。水平 导航适用性强&#xff0c;几乎所有类型的网站都可以使用&#xff0c;设计难度较低。 如果导航过于普通&#xff0c;无法容纳复杂的信息结构&#xff0c;就需要在…

使用VSCode远程连接服务器并解决Neo4j无法登陆问题

摘要&#xff1a;本文介绍了如何通过VSCode连接内网部署的Neo4j服务器&#xff0c;并启动服务。在访问Neo4j登录界面时&#xff0c;遇到了端口映射问题导致无法登录。通过手动添加7687端口的映射后&#xff0c;成功登录Neo4j。 我在内网部署了一台服务器&#xff0c;并在其上运…

Linux手动安装nginx

本次以安装nginx-1.12.2为例 1、首先说明一下,安装nginx之前需要安装如下素材: 2、开始安装 第一步,安装依赖yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel第二步,下载并安装nginx安装包(nginx官网:http://nginx.org/)# 下载 wget http://nginx…

Flink CDC(SQL Client)连接 MySQL 数据库教程

Flink CDC&#xff08;SQL Client&#xff09;连接 MySQL 数据库教程 这篇文章将指导如何使用 Flink CDC 连接到 MySQL 数据库&#xff0c;并捕获数据变更。我们将逐步完成以下操作&#xff1a; 1. 检查 Binlog 是否启用 首先&#xff0c;您需要确保 MySQL 的 Binlog 功能已…

蓝凌OA-EKP hrStaffWebService 任意文件读取漏洞

0x01 产品描述&#xff1a; ‌ 蓝凌OA-EKP‌是由深圳市蓝凌软件股份有限公司自主研发的一款数字化办公系统&#xff0c;主要适用于大中型企业在线化办公。它集成了流程管理、知识管理、会议管理、公文管理、合同管理、费用管控等多个模块&#xff0c;旨在帮助企业解决基础…

管家婆财贸ERP BB059.银行流水导入对账

最低适用版本: C系列 22.8 插件简要功能说明: 系统支持按固定模板导入银行流水明细银行流水支持销售单、销售退货单快捷对账,按单生成收款单银行流水支持生成其他付款业务单据更多细节描述见下方详细文档插件操作视频: 进销存类定制插件--银行流水导入对账 插件详细功能文…

第8章利用CSS制作导航菜单

8.1 水平顶部导航栏 8.1.1 简单水平导航栏的设计与实现 <nav>标签是HTML5新增的文档结构标签&#xff0c;用于标即导航栏&#xff0c;以便后续与网站的其他其内容整合&#xff0c;使用常用<nav>标签在页面上创建导航栏菜单区域。 8.1.1.1导航栏的创建 <!DOC…

给查询业务添加redis缓存和缓存更新策略

目录 一、添加redis缓存的主要逻辑 二、代码 三、结果 四、缓存更新策略 五、代码 一、添加redis缓存的主要逻辑 在未添加缓存时&#xff0c;前端向后端发起查询请求时&#xff0c;后端收到请求就直接查数据库&#xff0c;它的速度如下&#xff1a; 其实速度也不慢&#…

【贪心算法】No.1---贪心算法(1)

文章目录 前言一、贪心算法&#xff1a;二、贪心算法示例&#xff1a;1.1 柠檬⽔找零1.2 将数组和减半的最少操作次数1.3 最⼤数1.4 摆动序列1.5 最⻓递增⼦序列1.6 递增的三元⼦序列 前言 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到…

无人机动力测试台如何快速外接第三方传感器

前言 动力测试台对于测试动力系统的拉力、扭矩、RPM 和效率至关重要。将传感器集成到您的测试中增加了另一层优化&#xff0c;可以将您的性能提升到一个新的水平。 在无人驾驶行业中&#xff0c;有充分的证据表明&#xff0c;从外部传感器收集数据可能具有挑战性。为了解决这…