cookie、session、token的区别和联系

 博客主页:🏆看看是李XX还是李歘歘 🏆

🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺

💗点关注不迷路,总有一些📖知识点📖是你想要的💗

⛽️今天的内容是cookie、session、token的区别和联系⛽️💻💻💻

HTTP是一种无状态的协议,为了分辨链接是谁发起的,支持客户端与服务器之间的交互,需要通过不同的技术为交互存储状态,给用户颁发许可证,将动作连贯起来,许可证的实现技术有Cookie、Session和Token。

Cookies

是服务器生成,保存在本地机器上存储的小段文本,随每一个请求发送至同一服务器,是在客户端保持状态的方案。

主要内容包括:cookie名,cookie值,过期时间,路径和域。

设置过期时间,则cookie会被保存在硬盘上,过期后自动清除;若没有设置过期时间,则cookie被保存在浏览器内存中,浏览器关掉就消失了。路径和域就是对应的域名,a网站的cookie自然不能给b用。

Session

存在服务器端的一种用来存放对象的HashTable结构,是一种保存上下文信息的机制,它通过sessionId来区分不同的客户端,而sessionId是保存在客户端的,做为客户端与服务器的验证标识,它是一个24位的随机字符串,用户每次提交页面时,浏览器都会把这个sessionId包含在HTTP头中提交给WEB服务器。

session生成过程

当服务器接收到客户端的请求,要求产生一个session时,服务器会先检查下,客户端的cookies中是否有sessionId,并且判断它是否过期。若存在sessionId且还没有过期,则会根据该sessionId值将服务器中的session检索出来;否则,将产生一个新的session,当创建一个新session后,服务器也会产生一个sessionId号,回写客户端的cookies当中。

一般这个值会有个时间限制,超时后毁掉这个值,默认30分钟。

cookie和session的区别

  • 存储数据方面:session存储对象,cookie存储String
  • 存放地址:cookie保存在客户端,session保存在服务端
  • Session过多时会消耗服务器资源,大型网站会有专门Session服务器;每个域的Cookie数量和数据大小都是有限的,单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
  • session不区分路径,同一个用户在同一个网站期间,所有的session在任何一个地方都可以访问到。而cookies是区分路径的,如果设置了路径参数,那么同一个网站不同路径下的cookies是互相访问不到的。

单点登录中,cookie 被禁用了怎么办?

单点登录的原理是后端生成一个 session ID,设置到 cookie,后面所有请求浏览器都会带上cookie,然后服务端从cookie获取 session ID,查询到用户信息。所以,保持登录的关键不是cookie,而是通过cookie 保存和传输的 session ID,本质是能获取用户信息的数据。除了cookie,还常用 HTTP 请求头来传输。但这个请求头浏览器不会像cookie一样自动携带,需手工处理

session多服务器间共享,以及实现负载均衡时存在的问题

为了保障高可用,一般服务器至少需要两台机器,通过负载均衡的方式来决定到底请求该打到哪台机器上。这就涉及到了session多服务器间共享问题:

session 复制

A 生成 session 后复制到 B, C,这样每台机器都有一份 session,但是同一样的一份 session 保存了多份,数据冗余

session 粘连

让每个客户端请求只打到固定的一台机器上,支持按 ip 或 cookie 粘连等等,这样的话每个 client 请求到达 Nginx 后,只要它的 ip 不变,根据 ip hash 算出来的值会打到固定的机器上,也就不存在 session 找不到的问题了,当然不难看出这种方式缺点也是很明显,对应的机器挂了怎么办?

session 共享

将 session 保存在 redis,memcached 等中间件中,请求到来时,各个机器去这些中间件取一下 session 即可。就是每个请求都要去 redis 取一下 session,多了一次内部连接,消耗了一点性能。

Token

token意思是令牌,是用户身份的验证方式。最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名)等元素加密产生的加密字符串

Token认证的五点认识

  1. Token就是一些信息的集合;
  2. 在Token中包含足够多的信息,以便在后续请求中减少查询数据库的几率;
  3. 服务端需要对cookie和HTTP Authrorization Header进行Token信息的检查;
  4. 基于上一点,你可以用一套token认证代码来面对浏览器类客户端和非浏览器类客户端;
  5. 因为token是被签名的,所以我们可以认为一个可以解码认证通过的token是由我们系统发放的,其中带的信息是合法有效的;

为什么有了session还需要token?

随着Web,应用程序,已经移动端的兴起,基于服务器验证方式逐渐暴露出了问题。尤其是在可扩展性方面。

1、服务器压力增大

通常session是存储在内存中的,每个用户通过认证之后都会将session数据保存在服务器的内存中,而当用户量增大时,服务器的压力增大。

2、CSRF跨站伪造请求攻击

session是基于cookie进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。

3、扩展性不强

在服务端的内存中使用Seesion存储登录信息,伴随而来的是可扩展性问题。如果将来搭建了多个服务器,虽然每个服务器都执行的是同样的业务逻辑,但是session数据是保存在内存中的(不是共享的),用户第一次访问的是服务器1,当用户再次请求时可能访问的是另外一台服务器2,服务器2获取不到session信息,就判定用户没有登陆过。

在这些问题中,可扩展行是最突出的。因此我们有必要去寻求一种更有行之有效的方法。

Token的身份验证的过程

  1. 用户通过用户名和密码发送请求。

  2. 程序验证。

  3. 程序返回一个签名的token给客户端。

  4. 客户端储存token,并且每次用于每次发送请求。

  5. 服务端验证token并返回数据。

Token和session的区别

  • session是一种认证方式;token是认证授权的方式,认证是针对用户,授权是针对App,其目的是让 某App有权利访问 某用户 的信息。
  • 多数场景上使用 session 会更合理;如果在单点登录(一次性命令认证上),或者第三方共享、允许第三方调用 API 接口,使用 token 会更合适,最好在不同的业务场景中合理选型,才能达到事半功倍的效果。
  • Session是存放在服务器端的,可以保存在:内存、数据库、NoSQL中。它采用空间换时间的策略来进行身份识别,若Session没有持久化落地存储,一旦服务器重启,Session数据会丢失。Token是放在客户端存储的,采用了时间换空间策略,它也是无状态的,所以在分布式环境中应用广泛。 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== 

### 回答1: Cookie Session 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、付费专栏及课程。

余额充值