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。这意味着:
- 浏览器 会自动将
HttpOnlyCookie 随每个 HTTP 请求一起发送给服务器。- JavaScript 无法通过
document.cookie来访问这个 Cookie,从而防止了跨站脚本攻击(XSS)中的恶意脚本窃取 Cookie。
2.3 存储和传递方式
- JavaScript Cookie:存储在浏览器的 Cookie 存储区,但不会自动随着每次 HTTP 请求一起发送给服务器,除非开发者显式地将其包含在请求头中。例如,在发送 API 请求时,开发者可以手动将 Cookie 放入
Authorization头部。 - 服务器生成的 Cookie:存储在浏览器的 Cookie 存储区,并且会自动随每个请求发送给服务器。只要请求的 URL 与 Cookie 的
path和domain匹配,浏览器会自动携带 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:通过设置
path和domain属性,JavaScript Cookie 可以控制它的作用范围。可以通过这些属性限制 Cookie 只在特定路径或域名下有效。 - 服务器生成的 Cookie:与 JavaScript Cookie 类似,服务器生成的 Cookie 也可以通过
path和domain属性来设置作用范围。例如,path=/表示该 Cookie 在整个网站范围内有效,而path=/admin则限制在特定路径下有效。
2.7 生命周期
- JavaScript Cookie:可以通过
expires或max-age属性来控制 Cookie 的有效期。如果没有设置有效期,Cookie 将成为会话 Cookie,并在浏览器会话结束时删除。 - 服务器生成的 Cookie:同样可以通过
expires或max-age属性来控制 Cookie 的过期时间。没有设置过期时间时,Cookie 也是会话 Cookie,浏览器关闭后会自动删除。
3. 如何选择合适的 Cookie 类型?
3.1 使用 JavaScript Cookie
JavaScript Cookie 更适合用来存储一些不敏感、非安全的数据。例如:
- 用户界面设置(主题、语言偏好等)
- 本地存储(例如购物车内容、表单数据)
- 临时性的数据(如弹窗的显示状态)
3.2 使用服务器生成的 Cookie
服务器生成的 Cookie 通常用于存储敏感信息,特别是在涉及身份验证和会话管理时。例如:
- 用户身份认证(如登录令牌)
- 会话管理(如用户登录状态)
- 安全性要求较高的设置(如
HttpOnly、Secure)
4. 总结
JavaScript Cookie 与服务器生成的 Cookie 在工作方式、存储和访问安全性上有着显著的区别。JavaScript Cookie 数据不会自动随着每次 HTTP 请求一起发送给服务器;而服务器生成的 Cookie 更安全,适用于身份认证、会话管理等敏感信息的存储。
相关文章:
JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用
JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用 Cookie是一种甜点,同时也是web前端开发中一种非常常见且重要的技术,它用于在客户端和服务器之间存储和传递信息。用户身份验证、会话管理,还是用户个性化设置,都离不开Coo…...
深入了解Git、GitHub、GitLab及其应用技巧
在现代软件开发中,掌握版本控制系统(VCS)是至关重要的,其中Git是最流行的分布式版本控制工具之一。本文将详细介绍Git的用途及其基本操作,并深入探讨GitLab、GitHub、和Git Desktop的使用方法,同时总结Git的…...
ctfshow(316,317,318)--XSS漏洞--反射性XSS
反射型XSS相关知识 Web316 进入界面: 审计 显示是关于反射性XSS的题目。 思路 首先想到利用XSS平台解题,看其他师傅的wp提示flag是在cookie中。 当前页面的cookie是flagyou%20are%20not%20admin%20no%20flag。 但是这里我使用XSS平台,…...
Visual Studio2022版本的下载与安装
1-首先打开微软的官网,下面就是链接 下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux免费下载 Visual Studio IDE 或 VS Code。 在 Windows、Mac 上试用 Visual Studio Professional 或企业版。https://visualstudio.microsoft.com/zh-hans/downloads/?…...
nodeJS程序如何引入依赖包
在 Node.js 运行时中引入依赖包通常通过以下步骤完成: 初始化项目: 首先,你需要初始化一个 Node.js 项目。如果你还没有 package.json 文件,可以使用 npm init 命令来创建它。运行以下命令并按提示输入相关信息: npm i…...
建网站怎么建?只需几个步骤
在这个网络飞速发展的时代,越来越多的人都渴望拥有自己的网站。然而,对于大多数新手来说,如何建立自己的网站可能充满了挑战。本文将为您详细介绍建网站的关键步骤,让您能够轻松搭建自己的网站。 选择适合的建站工具 虽然市面上有…...
机器学习课程总结(个人向)
前言 通过看课件PPT整理的笔记,没有截图 由于大部分内容已经耳熟能详了,故记录比较简略,只记录了一些概念和需要记忆的地方。 里面有较多的个人观点,未必正确。如有错误,还请各位大佬指正 正文 绪论 机器学习的定…...
数据分析-43-时间序列预测之深度学习方法GRU
文章目录 1 时间序列1.1 时间序列特点1.1.1 原始信号1.1.2 趋势1.1.3 季节性和周期性1.1.4 噪声1.2 时间序列预测方法1.2.1 统计方法1.2.2 机器学习方法1.2.3 深度学习方法2 GRU2.1 模拟数据2.2 数据归一化2.3 生成滞后特征2.4 切分训练集和测试集2.5 模型训练2.6 模型预测3 参…...
Pandas | 数据分析时将特定列转换为数字类型 float64 或 int64的方法
类型转换 传统方法astype使用value_counts统计通过apply替换并使用astype转换 pd.to_numericx对连续变量进行转化⭐参数:返回值:示例代码: isnull不会检查空字符串 数据准备 有一组数据信息如下,其中主要将TotalCharges、MonthlyC…...
Elasticsearch的自定义查询方法到底是啥?
Elasticsearch主要的目的就是查询,默认提供的查询方法是查询全部,不满足我们的需求,可以定义查询方法 自定义查询方法 单条件查询 我们查询的需求:从title中查询所有包含"鼠标"这个分词的商品数据 SELECT * FROM it…...
Jenkins找不到maven构建项目
有的可能没有出现maven这个选项 解决办法:需要安装Maven项目插件 输入Maven Integration plugin...
怎么更换IP地址 改变IP归属地的三种方法
要更换自己的IP地址,您可以按照以下步骤进行操作: 1. 了解IP地址类型:首先,您需要了解您当前使用的IP地址类型。IP地址分为静态IP和动态IP两种。静态IP地址是固定的,使用第三方软件比如S深度IP转换器;而使用…...
C#-异步查询示例
文章速览 CancellationTokenSource 概述代码示例 坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ CancellationTokenSource 概述 使用System.Threading下的CancellationTokenSource类,进…...
设计模式之适配器模式(从多个MQ消息体中,抽取指定字段值场景)
前言 工作到3年左右很大一部分程序员都想提升自己的技术栈,开始尝试去阅读一些源码,例如Spring、Mybaits、Dubbo等,但读着读着发现越来越难懂,一会从这过来一会跑到那去。甚至怀疑自己技术太差,慢慢也就不愿意再触碰这…...
vue+exceljs前端下载、导出xlsx文件
首先安装插件 npm install exceljs file-saver第一种 简单导出 //页面引入 import ExcelJS from exceljs; import {saveAs} from file-saver; export default {methods: { /** 导出操作 */async handleExportFun() {let that this// 获取当前年月日 用户下载xlsx的文件名称设…...
算法定制LiteAIServer摄像机实时接入分析平台烟火检测算法的主要功能
在现代社会,随着人工智能技术的飞速发展,智能监控系统在公共安全领域的应用日益广泛。其中,烟火检测作为预防火灾的重要手段,其准确性和实时性对于减少火灾损失、保障人民生命财产安全具有重要意义。而算法定制LiteAIServer烟火检…...
用 Python 从零开始创建神经网络(二)
用 Python 从零开始创建神经网络(二) 引言1. Tensors, Arrays and Vectors:2. Dot Product and Vector Additiona. Dot Product (点积)b. Vector Addition (向量加法) 3. A Single Neuron with …...
嘉吉连续第七年亮相进博会
以“新质绿动,共赢未来”为主题,嘉吉连续第七年亮相进博会舞台。嘉吉带来了超过120款产品与解决方案,展示嘉吉在农业、食品、金融和工业等领域以客户为中心的创新成果。这些产品融合了嘉吉在相关领域的前瞻性思考,以及对本土市场的…...
设计模式之单列模式(7种单例模式案例,Effective Java 作者推荐枚举单例模式)
前言 在设计模式中按照不同的处理方式共包含三大类;创建型模式、结构型模式和行为模式,其中创建型模式目前已经介绍了其中的四个;工厂方法模式、抽象工厂模式、生成器模式和原型模式,除此之外还有最后一个单例模式。 单列模式介绍…...
多个服务器共享同一个Redis Cluster集群,并且可以使用Redisson分布式锁
Redisson 是一个高级的 Redis 客户端,它支持多种分布式 Java 对象和服务。其中之一就是分布式锁(RLock),它可以跨多个应用实例在多个服务器上使用同一个 Redis 集群,为这些实例提供锁服务。 当你在不同服务器上运行的…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
