Session、Cookie、JWT详解

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Cookie和Session的产生原因

为什么会有Cookie和Session,这是一个自然发生的事情,平时在进行开发时,通常使用HTTP或HTTPS协议发送请求到服务端,而学过计算机网络的都知道,HTTP协议是一种无状态的协议,服务端无法从请求本身知道请求方的相应信息状态,简单说就是请求对于服务端来说都是一视同仁的。这就无法满足实际的开发需求,所以就出现了Cookie和Session,这是HTTP协议无状态所引起的一些问题的补充。

Session简介

Session是存在服务端的,每当客户端请求服务端,服务端就会分配一个内存空间专门存储请求对象的状态等信息,这就是Session,通常我们利用Session存储一些客户端的状态,操作等基本信息,它的底层数据结构一般为线程安全的哈希表(比如Java中的ConcurrentHashMap)。

Session的工作原理与局限

举个例子,客户端A和服务端B,A向B首次请求,当B收到A的请求时,会针对这个请求分配相应的空间存储Session对象,同时产生一个sessionId,然后在响应头中设置Set-Cookie:JSESSIONID=****(上述提到的sessionId),在响应A请求时使A在A的本地设置一条存有SessionId的Cookie信息,同时默认过期时间为A与B的会话结束。然后A再向B请求时,就会在请求头上都带有Cookie信息,然后B通过分析Cookie信息得到sessionId,就可以知道这是A发来的信息,从而可以唯一标识A。
但是这个机制在高可用场景下存在一定的问题,还是刚才的例子,为了保证高可用,我们通常将服务端B多实例化,然后做相应的负载均衡等操作,分为实例B1,B2,B3等。这样就产生SessionId很难在这些实例中共享的问题,从而造成Session的丢失。

Cookie简介

简单来说就是服务端发送到浏览器端的一个数据。用于标识客户端身份。主要应用场景有很多,常见的比如用户操作记录等。

Cookie的工作原理

和上述的Session工作原理关联,客户端接收到服务端的响应时,照Set-Cookie的命令设置相应的Cookie并将其放在每次请求的请求头。
Cookie分为会话Cookie和持久Cookie,前者在浏览器关闭时销毁,不含过期时间,存在内存,后者则含有过期时间存入磁盘,当时间到则不可用。

安全性原理

根据凡是客户端的都是不安全的特性,无论是HTTP还是HTTPS,我们都不应该把敏感信息存入到Cookie中。举个简单的跨站脚本攻击的例子,有些情况下,HttpOnly的属性没有被设置,则有风险会被窃取Cookie。

作用域

所谓作用域就是Cookie能够发送到的链接信息。我们可以在Domain和Path中查看。
在Doamin中设置了域名,则也可以访问子域名。因此在做单点登录SSO的时候,我们通常要注意的是设置Cookie时应该将Cookie存储到第一级域名下。不然会造成跨域问题(基于浏览器同源策略,具体自行搜索了解一下)。
至于Path的话,只是形式变了,变成了路径的显示,和上面同理,设置了Path的目录,则该目录下的子目录都可以访问。

Cookie被禁用的场景

多做一个处理,在Cookie无法被设置的场景下,可以将SessionId写入URL中。从URL中获取SessionId。

JWT(JSON Web Token)与上述CookieSession的异同

相同之处

都是为了对用户做的一个状态存储和身份验证的机制。

不同之处

先要介绍一下JWT,通过JWT的全称字面意思理解就是Json格式的令牌。它之间存储的信息是经过数字签名的(因此具有密码学保证,具有可信任性)。可以根据使用的需求切换不同的密码算法进行签名。
那么与Cookie、Session机制的不同是什么呢?主要是JWT除了认证功能外,还有存储信息的功能,因为上述提到的安全特性,它可以安全的传输信息,因此可以将一些基本信息存储进去并且不必担心篡改的问题。(数字签名的一个特性就是防抵赖,防篡改)
还有对跨域认证的支持,JWT能够通过多个节点进行跨域认证,作跨域处理的成本更低。

JWT的构成

简单来说主要是三部分,Header、Payload、Signature拼接在一起。下面分别介绍

Header

通常情况下是两部分,alg属性和typ属性构成,其中alg顾名思义就是所采用的密码算法,常见的有SHA256,RSA等经典签名算法。而typ属性则主要是指定类型,默认为JWT。

Payload

主要是对客户端身份或是所需数据的声明。其中声明分为三种,registered、public、private的三种类型。
registered声明主要包含签发人,过期时间,主题,可发送方,生效时间与签发时间的部分。
public声明则字面意思理解可以随意添加信息,但是一般不添加敏感信息,因为public处的信息不安全,可以在客户端解密。
private声明则属于自定义声明,用于各方共享信息。

signature

英文理解一下就知道是签名信息,主要由三部分构成,header,payload,secret。
熟悉密码学基础的应该知道主要用于验证JWT的身份,防止篡改。这部分主要用于签名。

如何选择

SSO单点登录场景下推荐JWT,还有某些提供服务的业务场景下,由于很多第三方的api接入与提供,使用JWT既可以方便的解决跨域,还可以做白名单黑名单的校验。

CookieSessionJWT详解 基本概念 认证(Authentication) 验证当前用户的身份 授权(Authorization) 用户授予第三方应用访问该用户资源的权限(session, cookie, token, OAuth) 凭证(Credentials) 实现认证和授权的媒介 由于 http 是无状态的协议,每个请求是独立的,服务端无法确认当前请求者的身份,因此为了实现服务器和浏览器的会话跟踪,就需要使用 c... 阅读详情

相关推荐

清晰讲解CookieSession、Token、JWT之间的区别

详细介绍Cookie, Session, Token, JWT的知识和应用

记录分享编程与冲浪知识 1596

CookieSession、Token、JWT详细介绍

CookieSession、Token详细介绍

AN_NI_112的博客 1655

JWTCookieSession

Cookie 定义:是由服务器端生成,发送给浏览器,浏览器会将cookie中key/value保存到某个目录下的文本文件内,下次请求同一网站时将自动发送该cookie给浏览器 特点: 1、是以键值队的格式存储数据的 2、不同域名之间的cookie是不能互相访问的 3、当浏览器请求某网站时,会将所关联的cookie发送给浏览器 Session 应用:对于一些相对于很敏感的信息,一般是由session保存在服务器端进行状态保持 Django项目默认...

m0_61504888的博客 256

Cookie/JWT的区别和联系

Cookie/JWT的区别和联系 1、cookie 1.1、什么是cookiecookie是保存在用户浏览器端,用户名和密码等明文信息 1.2、cookie特点 HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息):每个请求都是完全独立的。所以服务器与浏览器为了进行会话跟踪(知道是谁在访问我),就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。 HTTP Cookie(也叫 Web Cookie 或浏览器 C

weixin_43393670的博客 3719

CookieSessionJWT

JSON Web Tokens(缩写 JWT)是目前最流行的跨域认证解决方案[1],解决了Session验证资源消耗和扩展性差的缺点。其官网是:首先,JWT的组成包括三个部分 :Header部分:主要包括alg属性和typ属性。alg表示签名算法(algorithm),默认是HMAC SHA256(写成HS56);typ表示令牌(token)类型(type),JWT令牌统一写为JWT。),此处为:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9。

weixin_61933613的博客 1078

cookiejwt解析

session 会在一定时间内保存在服务器上。访问增多会占用服务器的性能,若要减轻服务器性能问题,应使用 cookie。单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。对于浏览器外的其他客户端(比如iOS、Android),必须手动的设置cookiesession;),并且是以key:value的形式进行表示的。cookie 数据存放在客户端浏览器上,session 数据放在服务器上。cookie 不是很安全,是明文传递的,所以存在安全性的问题;

web$-小白 977

cookiesession、token、JWT

cookiesession、token、JWT

lza20001103的博客 1226

sessioncookiejwt

sessioncookiejwt的区别

bojinyuan00的博客 1183

SessionCookie、Token(JWT)】

自包含:指的是jwt令牌,看似是一个随机的字符串,但是我们是可以根据自身的需求在jwt令牌中存储自定义的数据内容。用户登录成功后,系统会自动下发JWT令牌,然后在后续的每次请求中,都需要在请求头header中携带到服务端,请求头的名称为 token ,值为 登录时下发的JWT令牌。运行测试方法,输出的结果就是生成的JWT令牌,,通过英文的点分割对三个部分进行分割,我们可以将生成的令牌复制一下,然后打开JWT的官网,将生成的令牌直接放在Encoded位置,此时就会自动的将令牌解析出来。

m0_72168982的博客 1479

CookieSession、Token、JWT

主要对CookieSession、Token、JWT做了简单介绍,并且对JWT在Gin框架中的使用以一个demo的形式进行了演示。

qq_47997583的博客 1257

一文搞懂CookieSession、Token、JWT

CookieSession是传统的基于服务器的会话管理机制,而Token和JWT则是更为灵活和安全的身份验证和授权机制,适用于分布式系统和前后端分离的应用场景。JWT是Token的一种实现方式,具有更高的可移植性和可扩展性。选择合适的技术可以有效地保护系统稳定运行并提高用户体验。

2401_85373732的博客 1139

授权认证登录之 CookieSession、Token、JWT详解

授权认证登录之 CookieSession、Token、JWT 详解

qq_20236937的博客 2700

CookieSessionJWT

CookieSessionJWTWeb开发中用于用户身份验证和会话管理的三种主要技术。Cookie是由服务器发送到客户端并存储在浏览器中的小型文本文件,适用于存储用户偏好和简单会话管理,但安全性较低。Session则是服务器端存储用户会话信息的机制,安全性较高,适合传统Web应用,但存在SessionID泄露的风险。JWT是一种以JSON对象形式在客户端和服务器间安全传输信息的开放标准,适用于分布式系统和前后端分离架构,通过签名机制保证数据安全,但密钥泄露会威胁其安全性。每种技术都有其特定的应用场景和

Very_a的博客 997

Cookiesession、token、JWT

通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就打卡成功)用户名密码登录邮箱发送登录链接手机号接收验证码只要你能收到邮箱/验证码,就默认你是账号的主人用户授予第三方应用访问该用户某些资源的权限,你在安装手机应用的时候,APP 会询问是否允许授予权限(访问相册、地理位置等权限)你在访问微信小程序时,当登录时,小程序会询问是否允许授予权限(获取昵称、头像、地区、性别等个人信息)

dgsfdsdf的博客 1813

一篇文章让你分清CookieSession、Token和JWT

通俗来讲就是用来验证当前用户的身份,例如我们看电影就得需要刷电影票入场、进车站需要刷身份证,电影票和身份证就是认证授权在我们生活中无处不在,当我们登录一个软件的时候,会询问是否允许授予地理位置、相机、麦克风等权限。实现授权的方式:CookieSession、Token、OAuth。

m0_74346394的博客 903

cookie sessionJWT

签名的目的就是为了防jwt令牌被篡改,而正是因为jwt令牌最后一个部分数字签名的存在,所以整个jwt 令牌是非常安全可靠的。一旦jwt令牌当中任何一个部分、任何一个字符被篡改了,整个令牌在校验的时候都会失败,所以它是非常安全可靠的。PS:Session 底层是基于Cookie实现的会话跟踪,如果Cookie不可用,则该方案,也就失效了。JWT的组成: (JWT令牌由三个部分组成,三个部分之间使用英文的点来分割)稍后我们再来学习如何来生成jwt令牌,以及如何来校验jwt令牌。

世之奇伟、瑰怪,非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也。 909

CookieSession、Token、JWT 详解与对比

本文详细介绍了四种常见的Web认证机制:CookieSession、Token和JWTCookie是存储在客户端的小型数据,Session则是服务器端维护的用户状态。Token提供无状态认证,而JWT作为Token的一种实现,采用JSON格式自包含用户信息。文章比较了四者在存储位置、状态管理、安全性、跨域支持等方面的差异,并解答了相关面试问题,包括工作原理、安全风险及防护措施等。JWT的无状态特性使其特别适合分布式系统,但需注意Token防篡改和过期控制。

weixin_39956506的博客 1580

Jwt,Token,CookieSession之间的区别

认证是关于验证你的凭据,如用户名/邮箱和密码,以验证访问者的身份。系统确定你是否就是你所说的使用凭据。在公共和专用网络中,系统通过登录密码验证用户身份。身份认证通常通过用户名和密码完成,有时与认证可以不仅仅通过密码的形式,也可以通过手机验证码或者生物特征等其他因素。在某些应用系统中,为了追求更高的安全性,往往会要求多种认证因素叠加使用,这就是我们经常说的多因素认证。通俗地讲就是验证当前用户的身份,证明你是你自己。

分享思想,留下痕迹。 1万+
上一篇: Java高阶笔记
下一篇: HashMap超详解
Tate_Brown
博客等级 码龄9年 39粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值