Cookie Session Token的各种知识

Session

1、为什么有session?
因为HTTP是无状态协议,每次请求服务器并不知道历史请求的记录,Session和Cookie主要就是为了弥补无状态的特性

2、Session是什么
客户端请求时,服务端开辟一块内存空间存放Session对象,存储结构为ConcurrentHasMap

3、如何判断是同一会话
服务器第一次收到请求时创建了Session对象,生成了一个seesionId,通过响应头的Set-Cookie:JESSIONID=XXXX命令,告知客户端要求设置Cookie

客户端收到后,在本机设置JSESSIONID=XXX的Cookie,该Cookie的过期时间为浏览器会话结束

在这里插入图片描述
接下来,客户端每次向服务端发送请求时都会带上该Cookie信息,包含seesionId,服务器读取该Cookie即可获得此次请求的sessionId

4、Session有什么缺点
A服务器存储了Session,进行负载均衡后,请求转发到了B,此时B没有A的Session,会导致Session失效

Cookies

主要用于判断两个请求是否来自于同一个浏览器,例如用户保持登录状态

Cookie主要用于下面三个目的

1、会话管理
登录、购物车、游戏得分或者服务器应该记住的其它内容

2、个性化
用户偏好、主题或者其他设置

3、追踪
记录和分析用户行为

JWT和Seesion Cookies的对比

在这里插入图片描述
没有保存状态时,无法进行单点登录
JWT和Session Cookies都是用来处理不同页面切换时用户登录信息能够保存下来的机制

在这里插入图片描述
使用seeionId来单点登录

什么是JWT?

通常也称为JSON令牌
JWT主要用于下面两点

1、认证 (Authorization) 这是使用JWT最常见的一种情况,一旦用户登录,后面每个请求都会包含JWT,从而允许用户访问该令牌所允许的路由、服务和资源。单点登录时当今广泛使用JWT的一项功能,因为它的开销很小

2、信息交换 JWT是能够安全传输信息的一种方式,通过使用公钥、私钥对JWT进行签名认证

JWT的格式

Header
Payload
Signature

在这里插入图片描述
Header:JWT的标头,一般由令牌的类型和使用的签名算法组成

{
	"alg":"HS256",
	"typ":"JWT"
}

PayLoad

Token的第二部分是PayLoad,PayLoad中包含一个声明,声明是有关实体(通常是用户)和其他数据的声明,共有三种类型的声明:
registered,public,privatre声明

  • registered声明 包含一组建议使用的预定义声明,主要包括
    在这里插入图片描述
  • public声明
    公共的声明,一般添加用户的相关信息或其他业务需要的必要信息,但不建议添加敏感信息
  • private声明
    自定义声明,旨在在同一使用它们的各方之间共享信息,既不是注册声明也不是公共声明
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

signature:
JWT的第三个部分是一个签证信息,由三个部分组成
header (base64后的)
payload (base64后的)
secret

例如

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

签名用于验证消息在此过程中没有更改
上面的信息拼凑在一起,就得到了token

JWT和Session Cookies的不同

1、密码签名
JWT有加密签名 Session Cookies则没有

2、JSON是无状态的
JWT是无状态的,因为声明被存储在客户端,而不是服务端内存中

身份验证可以在本地进行,而不是在请求必须通过服务器数据库或类似位置中进行

3、可扩展性
JWT是无状态的,可以节省服务器资源

4、JWT支持跨域认证
Session Cookies只能用在单节点的域或者它的子域中有效,使用JWT可以进行跨域认证

### 回答1: CookieSession Token 在 Web 应用中都被用来跟踪用户状态。两者的主要区别在于,Cookie 是存储在用户设备上的,而 Session Token 则是存储在服务器端的。 Cookie 是由浏览器自动创建和发送给服务器的,用户可以在浏览器的设置中查看和管理它们。Cookie 中可以存储一些键值对数据,在用户的不同请求之间共享数据。Cookie 适用于存储一些简单的数据,例如用户名和密码等。 Session Token 是在用户登录时在服务器端创建,并在用户与服务器进行交互时发送。服务器端会为每个用户维护一个唯一的 Session TokenSession Token 是在服务器端存储的,用户可以在浏览器中查看,但不能编辑或删除。Session Token 适用于存储用户身份,例如权限、购物车等。 总结,Cookie主要用来存储简单的,不太敏感的数据,且存在浏览器端;而Session token用来标识用户身份,数据都是存在服务器端。 ### 回答2: cookiesessiontoken都是现在常见的认证方式,用于保证Web应用程序的安全性和隐私性。在理解三者的区别之前,需要先了解它们的基本概念含义。 1. Cookie Cookie 是服务器发送给浏览器的小型数据文件,存储在用户的计算机中。浏览器在之后的请求中会将此文件发送到服务器,以便于验证用户的身份和记录用户的行为。 Cookie 的优点在于它可以存储比 Session 更多的信息,并且可以在浏览器关闭后仍然保持数据有效。缺点是 Cookie 可以被恶意软件或黑客轻易窃取。 2. Session Session 指的是服务器创建的一个会话过程,用于在特定时间段内记录某个用户的交互状态。通过 Session,Web应用程序可以在不同的页面之间共享数据,为用户提供个性化服务。 Session 的优点在于它存储在服务器上,保障了比 Cookie 更好的安全性和隐私性。但是, Session 也会消耗服务器的资源,因此需要谨慎管理。 3. Token Token 是一种随机生成的字符串,用于验证用户的身份和权限。在 Web 应用程序中,Token 可以被用来替代 CookieSession,因为它不会存储在用户的计算机中,也不需要服务器存储用户的状态。 Token 的优点在于它们相对更安全,因为它们没有任何销售性的信息存储在用户的浏览器中。另外, Token 机制可以支持无状态应用,也就是应用程序无需保存任何会话信息,更好的支持了分布式架构。 在以上区别基础上,三者的区别主要在于存储地点(客户端或服务器端)、存储内容(数据信息)、安全性和使用场景等。 - Cookie主要存储在客户端,并可以将更多的数据存储在客户端,Session存储于服务端提供了更好的安全性,但会占用更多服务器资源,Token能够将Session信息存储于客户端,也可以保证数据安全。 - Cookie主要用于客户端与服务端的交互;Session更注重用户身份的鉴别与用户状态的维护;Token更多地用于 API 认证。 - 一般情况下Cookie的安全性最低,Session的安全性中等,Token相对而言较为安全。 - 通常情况下,Token方式的应用程序可以跨平台、跨域和分布式部署,更加灵活多变。 综上所述,Cookiesessiontoken都是Web开发中常用的验证方式,它们在存储及应用方式上均有所差别。仔细分析自身需求,选择最适合的认证方式相比盲目跟随更为优合理。 ### 回答3: CookieSessionToken都是web应用中常见的身份认证和信息存储方式,它们之间最大的不同在于其存储的位置和方式。 Cookie是由服务器在浏览器中生成的,并存储在浏览器中的文件中。当浏览器向服务器发出请求时,会自动通过Cookie中的信息向服务器证明身份。Cookie在用户登录后会保存用户名、密码和一些其他信息,以便下次登录时自动填充,从而提高用户体验。 Session是一个服务器端的解决方案,它可以在服务器端存储用户的会话信息,并且在用户进行请求时将信息传输到客户端。Session的实现依赖于Cookie,服务器通过发送一个包含Session ID的Cookie,来记录用户的会话信息,服务器则将Session信息保存在服务器端的内存或者文件系统中,以确保用户信息的安全性。 Token是一种无状态的身份认证方式,它不同于CookieSession的保存信息方式,而是保存在客户端中。当用户登录时,服务器会生成一个Token并将其返回给客户端,客户端在后续的请求中会带上这个Token,服务器会通过验证Token的合法性来判断用户的身份。 总的来说,Cookie是一种简单且易用的Web身份认证方式,Session需要服务器支持,可以更好的保证用户信息的安全性,Token则更适合Web接口/移动端API身份认证。不同的应用场景可以选择适合的认证方式,以确保用户信息和身份的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值