深入解析:Cookie 与 Session 的区别及应用场景
引言
在Web开发中,Cookie 和 Session 是两种常用的用户状态管理机制。虽然它们的目标都是在无状态的HTTP协议中维护用户的状态,但它们的工作原理和适用场景却有所不同。在本文中,我们将深入探讨 Cookie 和 Session 的区别,并通过一些代码示例来加深理解。
目录
引言
1 什么是 Cookie?
1.1 Cookie 的node端基本使用
1.2 Cookie的Vue端或React端使用
2 什么是 Session?
2.1 Session 在node端的基本使用
3 Cookie 与 Session 的区别
3.1 存储位置
3.2 安全性
3.3 存储容量
3.4 性能影响
4 实际应用场景
4.1 Cookie 的应用场景
4.2 Session 的应用场景
5 总结
1 什么是 Cookie?
Cookie 是存储在用户浏览器中的小块数据,由服务器发送并存储在客户端。每次客户端向服务器发送请求时,浏览器会自动将相关的 Cookie 附加到请求头中。Cookie 主要用于以下几个场景:
- 会话管理:如登录状态、购物车等。
- 个性化设置:如用户偏好、主题等。
- 跟踪分析:如用户行为分析、广告跟踪等。
1.1 Cookie 的node端基本使用
// Node.js 使用 Express 设置 Cookie
const express = require('express');
const app = express();app.get('/set-cookie', (req, res) => {// 设置一个名为 'username' 的 Cookie,值为 'JohnDoe'res.cookie('username', 'JohnDoe', { maxAge: 900000, httpOnly: true });res.send('Cookie 已设置');
});app.get('/get-cookie', (req, res) => {// 读取名为 'username' 的 Cookielet username = req.cookies['username'];res.send(`Cookie 的值为:${username}`);
});app.listen(3000, () => {console.log('服务器运行在 http://localhost:3000');
});
1.2 Cookie的Vue端或React端使用
在前端方面,无论Vue或者是React项目,你可以查看这篇博客,对于Cookie的高效使用:
前端JS必用工具【js-tool-big-box】,获取浏览器参数、cookie、localStorage的存取-CSDN博客
2 什么是 Session?
Session 是一种在服务器端存储用户数据的机制。Session 数据通常保存在服务器的内存或数据库中,并通过 Session ID 进行关联。客户端通过 Cookie 或 URL 参数将 Session ID 发送给服务器,以便服务器查找到对应的 Session 数据。
2.1 Session 在node端的基本使用
下面是一个简单的示例,展示如何在服务器端创建和读取 Session。
// Node.js 使用 Express 和 express-session 设置 Session
const express = require('express');
const session = require('express-session');
const app = express();app.use(session({secret: 'secret-key', // 用于签名 Session ID 的密钥resave: false,saveUninitialized: true,cookie: { maxAge: 60000 } // Session 的有效期
}));app.get('/set-session', (req, res) => {// 设置 Session 数据req.session.username = 'JohnDoe';res.send('Session 已设置');
});app.get('/get-session', (req, res) => {// 读取 Session 数据let username = req.session.username;res.send(`Session 的值为:${username}`);
});app.listen(3000, () => {console.log('服务器运行在 http://localhost:3000');
});
3 Cookie 与 Session 的区别
3.1 存储位置
- Cookie:存储在客户端浏览器中。
- Session:存储在服务器端,客户端只保存 Session ID。
3.2 安全性
- Cookie:容易受到XSS(跨站脚本攻击)和CSRF(跨站请求伪造)攻击。如果 Cookie 中存储敏感信息,必须使用
HttpOnly和Secure属性来增加安全性。 - Session:相对安全,因为数据存储在服务器端。但需要保护 Session ID 不被窃取,否则可能导致会话劫持。
3.3 存储容量
- Cookie:每个 Cookie 的大小有限制(通常为 4KB),总数也有限制(每个域名最多 20 个左右)。
- Session:理论上存储容量无限制,只受服务器存储空间限制。
3.4 性能影响
- Cookie:每次请求都会发送所有相关的 Cookie,可能增加带宽消耗。
- Session:服务器端存储,需要在每次请求时查找对应的 Session 数据,可能增加服务器负载。
4 实际应用场景
4.1 Cookie 的应用场景
- 保存用户偏好设置:如语言选择、主题颜色等。
- 记住用户登录状态:如“记住我”功能。
- 跟踪用户行为:如统计访问量、广告点击率等。
4.2 Session 的应用场景
- 用户登录状态管理:尤其是涉及敏感信息的操作。
- 购物车管理:将用户选择的商品暂存,以便结算。
- 多步骤表单数据保存:如注册表单、订单填写等。
5 总结
Cookie 和 Session 各有优劣,开发者应根据具体需求选择合适的技术。在需要存储大量数据或敏感信息时,优先考虑 Session。而在需要跨页面保持状态或进行简单的客户端数据存储时,Cookie 是一个不错的选择。
相关文章:
深入解析:Cookie 与 Session 的区别及应用场景
引言 在Web开发中,Cookie 和 Session 是两种常用的用户状态管理机制。虽然它们的目标都是在无状态的HTTP协议中维护用户的状态,但它们的工作原理和适用场景却有所不同。在本文中,我们将深入探讨 Cookie 和 Session 的区别,并通过…...
LLM金融文本分类文档说明
Python注意事项: 1,创建虚拟环境: conda create --prefixD:\software\Anaconda3\envs\finance_analysis python3.10.4 conda create -p D:/software/anaconda3/envs/finance_analysis python3.10.4 注释: D:\software\anaconda3\e…...
EI检索,2天录用,3天见刊!截稿在即,这本水刊你还不投吗?
点击关注:关注GZH【欧亚科睿学术】,GET完整版2023JCR分区列表! 🎉 🎉 🎉 🎉 恭喜!这本毕业水刊仅2天录用!3天见刊! 重要时间节点如下 2024-08-03 Sub…...
sql获取过去的小时数
TIMESTAMPDIFF(HOUR, create_time, NOW()) AS pastHours 是一条 SQL 语句的一部分,它使用 TIMESTAMPDIFF 函数来计算两个时间点之间的差异,并将结果标记为 pastHours。 让我们详细解析一下这条语句: TIMESTAMPDIFF 函数: 这个函数用于计算两…...
【Android Studio】彻底卸载
文章目录 卸载程序控制面板卸载安全软件卸载 重启计算机删除文件重启计算机 我们在Android开发时涉及重装时,如果卸载不干净,再次安装是不会正常运行项目的,接下来就让我教你如何删除干净吧。 卸载程序 控制面板卸载 control控制面板一>…...
美术版权可以当做商标使用吗
美术版权与商标的区别及不可混用性分析 在知识产权领域,美术版权和商标权是两个重要的概念,它们各自承载着不同的法律意义和保护范围。 美术版权概述 美术版权,又称著作权,是指著作权人对其创作的美术作品所享有的权利。这些作品…...
控制某些请求不记录日志
说明:由于统一拦截日志请求,导致所有匹配的请求都会打印日志,这里需要控制有些请求执行不打印日志,比如定时每隔几秒执行某些请求。 具体实现如下: 一、自定义注解,如下: /** * Description: …...
Java线程池原理剖析和应用指南
目录 Java线程池详解一、Java线程池简介池化思想池化思想的优点 二、线程池的实现原理分析实现线程池需要考虑哪些问题?线程池的简单使用示例线程池原理的简单图示 三、Executor详解Executor简介Executor框架的继承结构总结ExecutorExecutorService 四、ThreadPoolE…...
ST-LINK烧录MCU
打开ST-LINK软件: 主板断电状态下接入烧录器,烧录器USB连接电脑: 主板上电,点击连接按钮: 点击加载文件: 点击写入按钮,烧录成功后拔掉烧录器,主板重新上电...
Go - 10. * 值类型和指针类型的差异
目录 一.引言 二.接收者类型 三.代码示例 1.指针接收者 2.值接收者 3.运行结果对比 4.代码修改 5.刨根问底 四.总结 一.引言 go 语言中 func (c *Title) 和 func (c Title) 两个方法的传参差一个 * 号,二者的区别是一个是指针类型,一个是值类型…...
waf绕过:网络安全狗绕过
引言: 所有的绕过原理都大致一致,但是并不是所有的绕过都能起到作用,渗透测试主要还是一个猜加试的过程,本文仅供参考 网络攻击或扫描绕过 1.get绕过(未开启cc防护) 网络安全狗的默认防护为,拒…...
Django中的模型小总结:
from django.db import models from django.urls import reverse# 自定义Manager方法 class HighRatingManager(models.Manager):def get_queryset(self):return super().get_queryset().filter(rating1)# CHOICES选项 class Rating(models.IntegerChoices):VERYGOOD 1, Very …...
深入理解 RDMA 的软硬件交互机制
作者:羽京 一、前言 随着数据中心的飞速发展,高性能网络不断挑战着带宽与时延的极限,网卡带宽从过去的 10 Gb/s 、25 Gb/s 到如今的 100 Gb/s、200 Gb/s 再到下一代的 400Gb/s 网卡,其发展速度已经远大于 CPU 发展的速度。 为了…...
轻优图片编辑压缩官网 轻优图片编辑压缩
轻优图片编辑压缩是一个无需安装,可以直接在线压缩图片大小的网站。轻优图片编辑压缩网站可以快速把图片压缩到指定大小。 轻优图片编辑压缩官网网址:www.qingyoubianji.com 浏览器打开 www.qingyoubianji.com 网站,你会看到一个简洁的界面…...
封装el-table 基于element封装可配置JSON表格组件
基于element封装可配置JSON表格组件 话不多说直接贴代码,复制运行即可查看效果 子组件全部代码 <template><div class"custom-table"><el-table:data"tableData"borderstyle"width: 100%"size"mini"max-h…...
Springboot 开发之 Quartz 任务调度框架简介
引言 Quartz Scheduler是一个功能丰富的开源作业调度库,它允许开发人员以灵活的方式创建和管理定时任务。以下是对Quartz Scheduler的详细解析: 官网地址:https://www.quartz-scheduler.org/w3cschool 官方文档:https://www.w3c…...
详解Xilinx FPGA高速串行收发器GTX/GTP(4)--TX/RX接口的数据位宽和时钟设计
目录 1、时钟设计 2、TX接口 3、接口位宽与时钟的关系 4、时钟来源方案 5、TX端内部的时钟分频设计 6、RX接口 文章总目录点这里:《FPGA接口与协议》专栏的说明与导航 1、时钟设计 GT收发器内部比较复杂,所使用的时钟就不止一个,比较主要的时钟有两个,架构…...
idea个人常用快捷键设置
个人开发者自查便于新环境配置快速查阅,统一windows与mac快捷键设置,有相同习惯的同学可自取。如果有一天你的快捷键不好用了,请一定记得看这篇文章,整理不易,留下关注再走呗。 基本操作快捷键 操作中文名称操作名快捷…...
超实用 不再担心猫咪掉毛 一文教你养宠家庭空气净化器怎么选
一到夏天,家中的猫咪给你带来的不仅仅是温暖的陪伴,还有那挥之不去的宠物异味。普通空气净化器虽然能够应对一般的空气净化需求,但对于养猫家庭特有的挑战,如宠物毛发、皮屑和异味等,它们往往难以胜任。专业的宠物空气…...
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
文章目录 一、HTTP/2 特性实现:nghttp2 源码剖析1.1 二进制帧1.2 多路复用1.3 头部压缩1.4 服务器推送1.5 总结 二、使用 nghttp2 库创建一个 HTTP/2 客户端三、结语 在互联网时代,网络传输协议的作用至关重要。在本文中,我们将对 HTTP/2 的一…...
Modbus通信调试难题困扰你?这款开源工具让你轻松成为工业自动化专家
Modbus通信调试难题困扰你?这款开源工具让你轻松成为工业自动化专家 【免费下载链接】ModbusTool A modbus master and slave test tool with import and export functionality, supports TCP, UDP and RTU. 项目地址: https://gitcode.com/gh_mirrors/mo/ModbusT…...
集合进阶二 (Set Map Steam流)
一.Set集合1.特点注意:无序不是每次执行出来的结果都是不一样的-------------(默认升序)2.HashSet集合的底层原理(基于哈希表)(1)哈希表eg.冲突是必然的 只能去降低冲突率(1…...
ElegantBook LaTeX模板技术解析:中文书籍排版系统架构与实战应用
ElegantBook LaTeX模板技术解析:中文书籍排版系统架构与实战应用 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook ElegantBook作为LaTeX中文书籍排版的专业解决方案,通…...
3个核心突破:科研工作者的文献获取难题终极解决方案
3个核心突破:科研工作者的文献获取难题终极解决方案 【免费下载链接】zotero-scipdf Download PDF from Sci-Hub automatically For Zotero7 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-scipdf 作为科研工作者,你是否经常遇到这些困扰&…...
日报 | Anthropic发RSP 2.0;DeepSeek V4将至;Claude史诗宕机;Mythos被关
头条:Anthropic发布负责任扩展政策2.0,AI安全治理进入新阶段 炸了!Anthropic刚刚更新了他们的"负责任扩展政策"(RSP),这可是AI安全领域的大事。 重点来了:这次更新引入了更灵活的风险…...
在超大数据集下 DuckDB 与 MySQL 查询速度对比俗
一、什么是urllib3? urllib3 是一个用于处理 HTTP 请求和连接池的强大、用户友好的 Python 库。 它可以帮助你: 发送各种 HTTP 请求(GET, POST, PUT, DELETE等)。 管理连接池,提高网络请求效率。 处理重试和重定向。 支…...
复古设备新生:树莓派运行OpenClaw轻量版+Phi-3-vision服务
复古设备新生:树莓派运行OpenClaw轻量版Phi-3-vision服务 1. 为什么要在树莓派上折腾OpenClaw? 去年收拾书房时,我在抽屉深处发现了吃灰多年的树莓派4B。这块曾经风靡极客圈的小板子,如今性能早已被现代硬件碾压。但当我看到Ope…...
郭老师-改命三部曲:婚姻、事业与学习
改命三部曲 ——婚姻、事业与学习“认命是悲观的逻辑, 人生要不认命, 不认命就要改你的命。”🌿 改命的关键,在于选择对、选择好, 并具备强大的自我重构能力。⚠️ 一、婚姻:从“我”到“我们” 婚姻的本质…...
告别命令行!用wsl2distromanager轻松管理多个WSL2发行版(附详细图文)
告别命令行!用WSL2 Distro Manager轻松管理多个WSL2发行版 对于Windows开发者来说,WSL2已经成为日常开发不可或缺的工具。它让我们能在Windows环境下无缝运行Linux环境,享受两全其美的开发体验。然而,随着项目复杂度增加ÿ…...
为什么 OXE 中 VLA 训练时 state 给关节,而预测的 action 是 xyz 加欧拉角
为什么 VLA 训练时 state 给关节,而预测的 action 是 xyz 加欧拉角 核心结论 在 VLA 训练中,state 使用关节状态(joint state),而 action 预测为 xyz Euler,这通常不是冲突,而是两者承担的角色…...
