当浏览器遇上服务器:解密Cookie/Session/Token三件套(必看干货)

Session, Token和Cookie的区别 文章目录1. Session 与 Cookie的区别及关联关系1.1. Cookie原理1.2. Session原理1.3. 总结2. token 1. Session 与 Cookie的区别及关联关系 cookie数据存放在客户的浏览器上,session数据放在服务器上(不同容器, 不同框架存储的位置不同, 可能是内存, 可能是文件, 也可以持久化储存) 1.1. Cookie原理 Cookie... 阅读详情

一、从银行办业务说起(场景带入)

老铁们想象一下这样的场景:你去银行柜台办业务(经典比喻又来了)

  • 第一次办理:柜员让你填表(创建session)
  • 二次办理:柜员拿出你的档案袋(读取session)
  • 问题来了:如果每天有100万人办业务,银行要准备多少档案柜?(服务器存储压力)

这时候三种解决方案应运而生:

  1. Cookie方案:把客户资料存在你的钱包里(客户端存储)
  2. Session方案:银行租个大仓库存档案(服务端存储)
  3. Token方案:给你个加密钢印戒指(无状态验证)

二、Cookie:带着小纸条的浏览器

运行原理(超直白版)

// 服务器说:存着这个!
response.setHeader('Set-Cookie', 'userID=9527')

// 浏览器说:给你之前的纸条
request.headers.get('Cookie') // userID=9527

使用场景举例

  • 记住用户语言偏好
  • 保持购物车信息
  • 广告追踪(这个要慎用!!)

致命缺陷(划重点)

  1. 容量限制:4KB上限(存不了大文件)
  2. 安全隐患:XSS跨站脚本攻击(偷cookie太容易了)
  3. 禁用风险:用户可能关闭cookie功能

三、Session:服务器的大账本

工作流程(带你看源码)

# 生成sessionID(重点!)
session_id = generate_random_string(32)

# 服务器存数据
session_store[session_id] = {
    'user_id': 9527,
    'last_login': '2023-08-20'
}

# 通过cookie传递sessionID
response.set_cookie('sessionID', session_id)

性能优化技巧

  • Redis集群存储(别用文件系统!)
  • 合理设置过期时间(别让session堆积成山)
  • 分布式一致性处理(集群环境下的坑)

四、Token:新时代的通行证

JWT结构拆解(图示法)

header.payload.signature
┌─────────┬─────────────┬──────────┐
│ 加密算法 │ 用户数据     │ 数字签名  │
└─────────┴─────────────┴──────────┘

代码实战(Node.js版)

// 生成token
const token = jwt.sign(
  { user: 'jack' }, 
  'secret_key',
  { expiresIn: '2h' }
);

// 验证token
jwt.verify(token, 'secret_key', (err, decoded) => {
  console.log(decoded.user) // jack
});

五、三剑客对比表格(收藏级干货)

维度CookieSessionToken
存储位置浏览器服务器客户端
安全性低(易被窃取)中(依赖sessionID)高(签名验证)
扩展性差(同源限制)一般(需共享存储)好(天然支持分布式)
适用场景简单状态保持传统Web应用前后端分离/API调用
性能影响无服务器内存/存储压力解密计算开销

六、实战选型指南(避坑经验)

企业级方案推荐

  1. 金融系统:Session + Redis集群(安全第一)
  2. 电商平台:Token + 短时Cookie(兼顾体验与安全)
  3. 物联网设备:Token + 硬件加密(省流量保安全)

常见误区警示(血泪教训)

  • ❌ Token不需要加密存储(大错特错!)
  • ❌ SessionID直接放URL(等着被劫持吧)
  • ❌ Cookie存敏感信息(等着上新闻吧)

七、安全加固方案(进阶技巧)

防御套餐推荐

  1. HTTPS强制使用(基础中的基础)
  2. SameSite属性设置(防CSRF利器)
  3. HttpOnly + Secure双保险(防XSS必备)
  4. 动态刷新机制(防重放攻击)

监控指标清单

  • Cookie盗用报警
  • Session超限预警
  • Token异常刷新检测

八、未来趋势预测(技术前瞻)

  1. 无状态化:Token方案持续演进
  2. 生物特征:指纹/虹膜认证融合
  3. 区块链存储:分布式身份验证
  4. 量子加密:应对未来算力挑战

结语(灵魂拷问)

下次面试官再问这三者区别,你能脱口而出:Cookie是带在身上工作证,Session是公司内部档案,Token是防伪数字证书!搞懂了这些,Web安全的大门才算真正向你敞开~(记得动手实践!)

项目代码第3讲【身份验证】:Session;Cookie;Token;具体如何实现Token? 1>用户登录流程用户登录,填写用户名和密码,并发送给服务端后端验证用户登录信息验证通过,签名生成一个Token,返回给客户端客户端将这个Token保存在本地(如浏览器的localStorage、sessionStorage、Cookie等)在下一次访问服务端的时候,会附带上这个Token服务端下一次接收到数据时,验证Token,并返回数据JWT本质上也是一个Token,只不过这个Token里面包含用户的数据,过期时间,加密方式等。 阅读详情

相关推荐

Cookie、Session、Token、JWT的区别和使用场景

针对认证问题,负载至少应该包含能够告知服务端“这个用户是谁”的信息,针对授权问题,令牌至少应该包含能够告知服务端“这个用户拥有什么角色/权限”的信息。JWT 的负载部分是可以完全自定义的,根据具体要解决的问题不同,设计自己所需要的信息,只是总容量不能太大,毕竟要受到 HTTP Header 大小的限制。(Header):它描述了令牌的类型(统一为 typ:JWT)以及令牌签名的算法,示例中 HS256 为 HMAC SHA256 算法的缩写,其他各种系统支持的签名。

2303_76696898的博客 922

[HCTF 2018]admin --- flask session 的加密解密

进入靶场,没什么特殊页面,如果运气足够好的话,账号:admin,密码:123,否则注册一个用户,然后登录抓包,看能否得到有用信息 后续的一个包,也没什么有用信息,看到 session 这部分,应该是base64编码,尝试了解码未得到结果,登录成功后,尝试其他功能看能否得到有用信息 修改密码部分,网页源码中有端倪 访问地址,发现更多有用信息,flask 是 python 的 web 端框架,赶紧搜索了一下 flask session Flask的session使用 利用 flask中sessi..

生死看淡,不服就干的博客 6853

面试系列:cookie、session、token的区别

软件测试是一项复杂而又系统的工程,从界面、到数据请求的组织形式、到通信协议,到传输过程、到服务器响应、到响应内容、到界面展示,测试人员都需要知道,在前面的时候,凯哥说了测试工程师如何定位软件的缺陷属于前端还是后端的问题,这一次,凯哥详细介绍另一个测试工程师面试中被经常问到的问题:接口测试中cookie、session、token练习和区别的问题。其实也不仅仅是接口测试中需要知道和了解,测试就应该知道和了解。本身这东西很是稀松平常,但是刚转行的测试新手遇到面试官这种问题的时候,还是会显得很慌,希望本文给你..

IT教育任姐姐的博客 1153

python web编程一:token、session、cookie、密码加解密

HTTP协议是无状态协议,为了解决它产生了cookie和session技术。session idsession idsession idsession idsessionsessionsessionsession idsession idsessioncookie服务器端保存着大量session信息,很消耗服务器内存,而且如果多服务器部署,还要考虑session共享的问题,比如等方案。

谁家的喵 923

保姆级教程:用Python spatialdata框架搞定10x Xenium空间转录组数据(从下机到高级分析)

本教程详细介绍了如何使用Python spatialdata框架处理10x Xenium空间转录组数据,从数据获取到高级分析的全流程。涵盖环境配置、数据读取、质量控制、降维聚类、细胞注释及空间共定位分析等关键步骤,特别适合生物信息学研究者快速掌握Xenium数据分析技术。

weixin_30300225的博客 484

实用电路精讲系列---双级运放放大电路(差分放大+跟随缓冲)

本文分析了双极运放放大电路的工作原理及其典型应用。该电路结合差分放大器和跟随缓冲器,实现高精度信号放大与阻抗匹配。差分放大器通过放大差模信号并抑制共模噪声提升信噪比;跟随缓冲器则提供阻抗变换,确保信号稳定传输。两者协同工作可优化输入阻抗、增强噪声抑制并提高设计灵活性。文章还列举了10个典型应用案例,包括医疗设备、工业传感器和新能源系统等,展示了该电路在精密电子系统中的关键作用。最后通过实用电路分析,详细说明了各模块功能及设计注意事项。

weixin_40590799的博客 2957

flask的session

flask的session没有在服务端存储数据后期扩展可以将session存入redis。

weixin_56468833的博客 635

自考计算机系统原理(第六章计算机系统概论)-13015

名词解释 I/O 硬件 I/O软件 用户空间I/O软件 内核空间I/O 软件 系统调用处理程序 系统调用服务例程 设备驱动程序 中断服务程序 系统级1/O函数 虚拟文件系统 文件描述符 文件元数据 流缓冲区 索引节点 目录文件 目录项 系统打开文件表 磁盘高速缓存 高速缓存 RAM I / O 控制方式 程序直接控制I/O 就绪状态 中断控制I/O 中断屏蔽字 多重中断 中断嵌套 DMA 方式 DMA 控制器 设备控制器 I/O端口 控制端口 数据端口 状态端口 I/O 地址空间 独立编址方式 统一编址方

qq_23872947的博客 1150

php 解密session字符串

/** * php 解密session字符串(官方写法) * @param string $session_string session字符串 * @return array */ public function decodeSession(string $session_string) { $current_session = session_encode(); foreach ($_SESSION as $key => $value) { unset($_S

后端菜鸡 2190

微信小程序消息推送实战:从模板消息到订阅消息的进阶指南

本文详细解析了微信小程序消息推送的核心机制,重点对比了模板消息与订阅消息的差异与应用场景。模板消息适用于支付成功等强即时性业务回执,而订阅消息则需用户授权,更适合物流提醒等可预期通知。文章提供了从授权、配置到发送的完整实战指南,并分享了常见的避坑技巧与性能优化建议,帮助开发者构建高效、合规的用户触达体系。

weixin_29231027的博客 594

innovus:sroute 双层follow pin的做法

根据std cellpower pin的层次可以分成两种情况。

m0_61544122的博客 2731

JavaWeb学习总结(十二)——Session

一、Session简单介绍   在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。 二、Session和Cookie的...

weixin_34411563的博客 1756

深度解析与实战:长短时记忆网络(LSTM)在股票走势预测中的应用(基于Python + PyTorch)

本文全面探讨了LSTM在股票价格预测中的应用,从理论基础到实践操作。文章首先强调了股票市场预测的重要性,并介绍了LSTM网络结构及其在处理时间序列数据中的优势。接着,详细说明了数据预处理的关键步骤,包括数据收集、清洗、特征选择和归一化。文章还讨论了LSTM模型的构建、训练和评估,并提供了Python及PyTorch的实操案例。最后,总结了LSTM在股票预测的成果,并提出了未来研究的方向,如模型优化和特征工程,旨在帮助读者掌握LSTM在股票价格预测中的应用,并探索提升模型性能的方法。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2105

cookie和session和token的区别

本质:服务器发送给客户端(浏览器)的小型文本数据(通常 4KB 以内),存储在客户端本地。工作流程用户首次访问服务器时,服务器生成 Cookie 并通过响应头(Set-Cookie)发送给浏览器;浏览器将 Cookie 保存到本地(如硬盘或内存);后续用户访问该服务器时,浏览器会自动将 Cookie 放入请求头(Cookie)中发送给服务器,供服务器识别用户。特点可设置过期时间(expires或max-age):过期后自动删除,否则默认关闭浏览器后失效;有域名和路径限制(domain。

m0_71804489的博客 1917

【突变检验合集】含Pettitt突变检验等

突变检验方法合集

WW、forever的博客 3534

SAP Joule Studio 能不能用来开发 skill:可以,但它开发的是 Joule 语境下的企业级 skill,而不是替代所有 SAP 开发技术的万能锤

SAP Joule Studio 专为开发Joule技能(Joule skills)而设计,这些技能是执行确定性单步业务动作的原子能力。它通过自然语言接口连接SAP和非SAP系统,适合处理边界清晰、可审计的任务(如创建工单、查询发票)。Joule技能作为会话式业务编排层,与ABAP、CAP等核心技术互补而非替代。开发支持低代码和专业代码两种方式,并具备企业级治理能力,但需要相应的BTP订阅和技术基础。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 202

expires为session_面试必问:session,cookie和token的区别

点击上方蓝字关注我们 !session,cookie和token究竟是什么简述cookie,session,token作为面试必问题,很多同学能答个大概,但是又迷糊不清,希望本篇文章对大家有所帮助http是一个无状态协议什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。这种无状态的的好处是快速。cookie和session由于http的无状态性,为了使...

weixin_29638987的博客 5371

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

cookie、session、token详解和区别

cookie、session、token工作原理、特点、应用场景及三者区别

qq_37292005的博客 2033

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

session、cookie和token的区别

Cookie、session和token的区别

weixin_42672802的博客 2851

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

session,cookie和token究竟是什么,一文搞懂!

session,cookie和token究竟是什么,一文搞懂!

lza20001103的博客 2353

解密Web安全:Session、Cookie和Token的不解之谜

web安全;session;cookie;token

todoitbo的博客 1万+

Session,Cookie和Token

但token不同,token是开发者为了防范csrf而特别设计的令牌,浏览器不会自动添加到headers里,攻击者也无法访问用户的token,所以提交的表单无法通过服务器过滤,也就无法形成攻击。服务器端接受客户端请求后,建立一个session,并发送一个http响应到客户端,这个响应头,其中就包含Set-Cookie头部。该头部包含了sessionId。现在大多都是Session + Cookie,但是只用session不用cookie,或是只用cookie,不用session在理论上都可以保持会话状态。

yyzz7579的博客 1135

Cookie、Session和Token的区别与联系

以下是本人的一些笔记,助于理解概念,并不详细,详细内容可以参考文中提供的链接。 一、HTTP的无状态性 HTTP是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。 假设要求登录认证的Web页面本身无法进行状态的管理(不记录已登录的状态),那么每次跳转新页面不是要再次登录,就是要在每次请求报文中附加参数来管理登录状态。 不可否认,无状态协议当然有它的优点。由于不必保存状态,自然可减少服务器的CPU及内存资源的消耗。从另一个角度来讲,也正是因为HTTP协议

小菜鸡的博客 3686

Session、Cookie、Token、JWT分别都是什么?作用都有哪些?

本文摘要:文章系统介绍了Web身份验证技术的发展历程。首先分析HTTP无状态特性带来的用户识别问题,早期通过Session实现会话保持,但存在服务器存储压力大、扩展性差等缺点。进而介绍Token机制,重点解析JWT的结构(Header/Payload/Signature)和验证原理,对比不同加密算法的适用场景。最后详细讲解Cookie的客户端存储机制,包括生成流程、关键属性(HttpOnly/Secure等)及生命周期管理,并指出其安全性局限。

m0_70325779的博客 940

cookie,session与token的区别

Cookie实际上是一小段的文本信息。Cookies是由服务器产生的。当浏览器第一次访问服务端时,服务器此时肯定不知道他的身份,所以创建一个独特的身份标识数据,格式为key=value,放入到Set-Cookie字段里,随着响应报文发给浏览器。浏览器看到有Set-Cookie字段以后就知道这是服务器给的身份标识,于是就保存起来,下次请求时会自动将此key=value值放入到Cookie字段中发给服务端。服务端收到请求报文后,发现Cookie字段中有值,就能根据此值识别用户的身份然后提供数据。 Se..

wangyuancode的博客 6770

Cookie、Session、Token 三者核心区别(易懂版)

本文通俗易懂地讲解了Cookie、Session和Token的核心概念与区别:Cookie是存储在客户端的"身份小纸条",用于保存简单信息;Session是服务器端的"专属档案柜",保存敏感信息;Token则是无状态的"身份通行证",适合跨域场景。三者在存储位置(客户端/服务器)、安全性(低/中/高)、状态性(无/有/无)和扩展性(差/差/好)等方面存在本质差异。

2302_80931451的博客 1960
上一篇: MySQL慢查询优化实战:我从7秒优化到0.01秒的血泪史
下一篇: Keil5双核配置指南:同时兼容C51与STM32开发环境
CodeHorizon
博客等级 码龄2年 229粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值