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

深入解析: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. 会话管理:如登录状态、购物车等。
  2. 个性化设置:如用户偏好、主题等。
  3. 跟踪分析:如用户行为分析、广告跟踪等。

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 中存储敏感信息,必须使用 HttpOnlySecure 属性来增加安全性。
  • Session:相对安全,因为数据存储在服务器端。但需要保护 Session ID 不被窃取,否则可能导致会话劫持。

3.3 存储容量

  • Cookie:每个 Cookie 的大小有限制(通常为 4KB),总数也有限制(每个域名最多 20 个左右)。
  • Session:理论上存储容量无限制,只受服务器存储空间限制。

3.4 性能影响

  • Cookie:每次请求都会发送所有相关的 Cookie,可能增加带宽消耗。
  • Session:服务器端存储,需要在每次请求时查找对应的 Session 数据,可能增加服务器负载。

4 实际应用场景

4.1 Cookie 的应用场景

  1. 保存用户偏好设置:如语言选择、主题颜色等。
  2. 记住用户登录状态:如“记住我”功能。
  3. 跟踪用户行为:如统计访问量、广告点击率等。

4.2 Session 的应用场景

  1. 用户登录状态管理:尤其是涉及敏感信息的操作。
  2. 购物车管理:将用户选择的商品暂存,以便结算。
  3. 多步骤表单数据保存:如注册表单、订单填写等。

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表格组件 话不多说直接贴代码&#xff0c;复制运行即可查看效果 子组件全部代码 <template><div class"custom-table"><el-table:data"tableData"borderstyle"width: 100%"size"mini"max-h…...

Springboot 开发之 Quartz 任务调度框架简介

引言 Quartz Scheduler是一个功能丰富的开源作业调度库&#xff0c;它允许开发人员以灵活的方式创建和管理定时任务。以下是对Quartz Scheduler的详细解析&#xff1a; 官网地址&#xff1a;https://www.quartz-scheduler.org/w3cschool 官方文档&#xff1a;https://www.w3c…...

详解Xilinx FPGA高速串行收发器GTX/GTP(4)--TX/RX接口的数据位宽和时钟设计

目录 1、时钟设计 2、TX接口 3、接口位宽与时钟的关系 4、时钟来源方案 5、TX端内部的时钟分频设计 6、RX接口 文章总目录点这里:《FPGA接口与协议》专栏的说明与导航 1、时钟设计 GT收发器内部比较复杂,所使用的时钟就不止一个,比较主要的时钟有两个,架构…...

idea个人常用快捷键设置

个人开发者自查便于新环境配置快速查阅&#xff0c;统一windows与mac快捷键设置&#xff0c;有相同习惯的同学可自取。如果有一天你的快捷键不好用了&#xff0c;请一定记得看这篇文章&#xff0c;整理不易&#xff0c;留下关注再走呗。 基本操作快捷键 操作中文名称操作名快捷…...

超实用 不再担心猫咪掉毛 一文教你养宠家庭空气净化器怎么选

一到夏天&#xff0c;家中的猫咪给你带来的不仅仅是温暖的陪伴&#xff0c;还有那挥之不去的宠物异味。普通空气净化器虽然能够应对一般的空气净化需求&#xff0c;但对于养猫家庭特有的挑战&#xff0c;如宠物毛发、皮屑和异味等&#xff0c;它们往往难以胜任。专业的宠物空气…...

深入理解HTTP/2:nghttp2库源码解析及客户端实现示例

文章目录 一、HTTP/2 特性实现&#xff1a;nghttp2 源码剖析1.1 二进制帧1.2 多路复用1.3 头部压缩1.4 服务器推送1.5 总结 二、使用 nghttp2 库创建一个 HTTP/2 客户端三、结语 在互联网时代&#xff0c;网络传输协议的作用至关重要。在本文中&#xff0c;我们将对 HTTP/2 的一…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...