返回顶部
首页 > 资讯 > 精选 >session、cookie、token的区别是什么
  • 415
分享到

session、cookie、token的区别是什么

2023-07-05 06:07:21 415人浏览 八月长安
摘要

本篇内容介绍了“session、cookie、token的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.为什么会有它们?我们都

本篇内容介绍了“session、cookie、token的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.为什么会有它们?

我们都知道 Http 协议是无状态的,所谓的无状态就是客户端每次想要与服务端通信,都必须重新与服务端链接,意味着请求一次客户端和服务端就连接一次,下一次请求与上一次请求是没有关系的。

这种无状态的方式就会存在一个问题:如何判断两次请求的是同一个人?就好比用户在页面 A 发起请求获取个人信息,然后在另一个页面同样发起请求获取个人信息,我们如何确定这俩个请求是同一个人发的呢?

为了解决这种问题,我们就迫切需要一种方式知道发起请求的客户端是谁?此时,cookie、token、session 就出现了,它们就可以解决客户端标识的问题,在扩大一点就是解决权限问题。

它们就好比让每个客户端或者说登录用户有了自己的身份证,我们可以通过这个身份证确定发请求的是谁!

2.什么是 cookie?

cookie 是保存在客户端或者说浏览器中的一小块数据,大小限制大致在 4KB 左右,在以前很多开发人员通常用 cookie 来存储各种数据,后来随着更多浏览器存储方案的出现,cookie 存储数据这种方式逐渐被取代,主要原因有如下:

  • cookie 有存储大小限制,4KB 左右。

  • 浏览器每次请求会携带 cookie 在请求头中。

  • 字符编码为 Unicode,不支持直接存储中文。

  • 数据可以被轻易查看。

cookie 主要有以下属性:

属性名称属性含义
namecookie 的名称
valuecookie 的值
commentcookie 的描述信息
domain可以访问该 cookie 的域名
expirescookie 的过期时间,具体某一时间
maxAgecookie 的过期时间,比如多少秒后 cookie 过期。
pathcookie 的使用路径,
securecookie 是否使用安全协议传输,比如 SSL 等
versioncookie 使用的版本号
isHttpOnly指定该 Cookie 无法通过 javascript 脚本拿到,比如 Document.cookie 属性、XMLHttpRequest 对象和 Request api 都拿不到该属性。这样就防止了该 Cookie 被脚本读到,只有浏览器发出 HTTP 请求时,才会带上该 Cookie。

我们介绍了 cookie,那么我们是如何通过 cookie 来实现用户确定或者权限的确定呢?

我们就以一个普通网站的用户登录操作以及后续操作为例,主要过程可以简单用下图表示:

session、cookie、token的区别是什么

从上图中可以看到使用 cookie 进行用户确认流程是比较简单的,大致分为以下几步:

  1. 客户端发送请求到服务端(比如登录请求)。

  2. 服务端收到请求后生成一个 session 会话。

  3. 服务端响应客户端,并在响应头中设置 Set-Cookie。Set-Cookie 里面包含了 sessionId,它的格式如下:Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]。其中 sessionId 就是用来标识客户端的,类似于去饭店里面,服务员给你一个号牌,后续上菜通过这个号牌来判断上菜到哪里。

  4. 客户端收到该请求后,如果服务器给了 Set-Cookie,那么下次浏览器就会在请求头中自动携带 cookie。

  5. 客户端发送其它请求,自动携带了 cookie,cookie 中携带有用户信息等。

  6. 服务端接收到请求,验证 cookie 信息,比如通过 sessionId 来判断是否存在会话,存在则正常响应。

cookie 主要有以下特点:

  • cookie 存储在客户端

  • cookie 不可跨域,但是在如果设置了 domain,那么它们是可以在一级域名和二级域名之间共享的。

3.什么是 session?

在上一节中,我们通过 Cookie 来实现了用户权限的确认,在其中我们提到了一个词:session。顾名思义它就是会话的意思,session 主要由服务端创建,主要作用就是保存 sessionId,用户与服务端之间的权限确认主要就是通过这个 sessionId。

简单描述下 session:

session 由服务端创建,当一个请求发送到服务端时,服务器会检索该请求里面有没有包含 sessionId 标识,如果包含了 sessionId,则代表服务端已经和客户端创建过 session,然后就通过这个 sessionId 去查找真正的 session,如果没找到,则为客户端创建一个新的 session,并生成一个新的 sessionId 与 session 对应,然后在响应的时候将 sessionId 给客户端,通常是存储在 cookie 中。如果在请求中找到了真正的 session,验证通过,正常处理该请求。

总之每一个客户端与服务端连接,服务端都会为该客户端创建一个 session,并将 session 的唯一标识 sessionId 通过设置 Set-Cookie 头的方式响应给客户端,客户端将 sessionId 存到 cookie 中。

通常情况下,我们 cookie 和 session 都是结合着来用,当然你也可以单独只使用 cookie 或者单独只使用 session,这里我们就将 cookie 和 session 结合着来用。

我们可以在修改一下整个请求过程图,如下所示:

session、cookie、token的区别是什么

4.cookie 和 session 的区别?

前面两节我们介绍了 cookie 和 session,它们两者之间主要是通过 sessionId 关联起来的,所以我们总结出:sessionId 是 cookie 和 session 之间的桥梁。我们日常的系统中如果在鉴权方面如果使用的是 cookie 方式,那么大部分的原理就和我们前面说的一样。

或者我们可以换个说法,session 是基于 cookie 实现的,它们两个主要有以下特点:

  • session 比 cookie 更加安全,因为它是存在服务端的,cookie 是存在客户端的。

  • cookie 只支持存储字符串数据,session 可以存储任意数据。

  • cookie 的有效期可以设置较长时间,session 有效期都比较短。

  • session 存储空间很大,cookie 有限制。

系统想要实现鉴权,可以单独使用 cookie,也可以单独使用 session,但是建议结合两者使用。

5.token 是什么?

前面我们说的 sessionId 可以叫做令牌,令牌顾名思义就是确认身份的意思,服务端可以通过令牌来确认身份。

cookie+session 是实现认证的一种非常好的方式,但是凡事都有两面性,它们实现的认证主要有以下缺点:

  • 增加请求体积,浪费性能,因为每次请求都会携带 cookie。

  • 增加服务端资源消耗,因为每个客户端连接进来都需要生成 session,会占用服务端资源的。

  • 容易遭受 CSRF 攻击,即跨站域请求伪造。

那么为了避免这些缺点,token 方式的鉴权出现了,它可以说是一个民间的认证方式,但是不得不说它带来了非常多的好处。

token 的组成:

token 其实就是一串字符串而已,只不过它是被加密后的字符串,它通常使用 uid(用户唯一标识)、时间戳、签名以及一些其它参数加密而成。我们将 token 进行解密就可以拿到诸如 uid 这类的信息,然后通过 uid 来进行接下来的鉴权操作。

token 是如何生成的:

前面我们说 cookie 是服务端设置了 set-cookie 响应头之后,浏览器会自动保存 cookie,然后下一次发送请求的时候会自动把 cookie 携带上。但是我们说 cookie 算是一种民间的实现方式,所以说浏览器自然不会对它进行成么处理。token 主要是由服务器生成,然后返回给客户端,客户端手动把 token 存下来,比如利用 localstorage 或者直接存到 cookie 当中也行。

token 认证流程:

  1. 客户端发起登录请求,比如用户输入用户名和密码后登录。

  2. 服务端校验用户名和密码后,将用户 id 和一些其它信息进行加密,生成 token。

  3. 服务端将 token 响应给客户端。

  4. 客户端收到响应后将 token 存储下来。

  5. 下一次发送请求后需要将 token 携带上,比如放在请求头中或者其它地方。

  6. 服务端 token 后校验,校验通过则正常返回数据。

用图表示大致如下:

session、cookie、token的区别是什么

总结

虽然前面解释 cookie、session、token 用了不少口舌,但是归根结底啊,它们的目的都是一样的:鉴权和认证。

鉴权认证方式特点优点缺点
cookie1.存储在客户端。2.请求自动携带 cookie。3.存储大小 4KB。1.兼容性好,因为是比较老的技术。2.很容易实现,因为 cookie 会自动携带和存储。1.需要单独解决跨域携带问题,比如多台服务器如何共享 cookie。2.会遭受 CSRF 攻击。3.存储在客户端,不够安全。
session1.存储在服务端。2.存储大小无限制。1.查询速度快,因为是个会话,相当于是在内存中操作。2.结合 cookie 后很容易实现鉴权。3.安全,因为存储在服务端。1.耗费服务器资源,因为每个客户端都会创建 session。2.占据存储空间,session 相当于存储了一个完整的用户信息。
token1.体积很小。2.自由操作存储在哪里。1.安全,因为 token 一般只有用户 id,就算被截取了也没什么用。2.无需消耗服务器内存资源,它相当于只存了用户 id,session 相当于存储了用户的所有信息。3.跨域处理较为方便,比如多台服务器之间可以共用一个 token。1.查询速度慢,因为 token 只存了用户 id,每次需要去查询数据库

总结下来就是:session 是空间换时间,token 是时间换空间。

附:cookie/session的联系

session虽说存放在服务器端,但是仔细看刚才的执行流程你会明白,session是依赖于cookie的,这一点也是本篇文章想要着重强调的

cookie/session使用注意事项

cookie大小有限制 4k

cookie不能跨浏览器

cookie不支持中文

如果是安全性较高的数据应存放在session中,因为cookie存放在客户端总会轻易被不法分子获取

如果是访问量特别大的网站,尽量不要在session中存储用户数据,因为每个用户存一个session会给服务器造成很大的压力

但需要注意的是,若服务器做了负载均衡,用户的下一次请求可能会被定向到其它服务器节点,若那台节点上没有用户的Session信息,就会导致会话验证失败。所以Session默认机制下是不适合分布式部署的。

“session、cookie、token的区别是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: session、cookie、token的区别是什么

本文链接: https://lsjlt.com/news/350135.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • session、cookie、token的区别是什么
    本篇内容介绍了“session、cookie、token的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.为什么会有它们?我们都...
    99+
    2023-07-05
  • Cookie/Session/Token的区别有哪些
    本篇内容主要讲解“Cookie/Session/Token的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Cookie/Session/Token的区...
    99+
    2024-04-02
  • 什么是Cookie、Session、Token、JWT
    这篇文章主要介绍“什么是Cookie、Session、Token、JWT”,在日常操作中,相信很多人在什么是Cookie、Session、Token、JWT问题上存在疑惑,小编查阅了各式资料,整理出简单好用...
    99+
    2024-04-02
  • Session与cookie的区别是什么
    Session与cookie的区别:Session是存储在服务器端的,cookie是存储在客户端的。Session比较安全,cookie用某些手段可以修改,不安全。Session依赖于cookie进行传递。Session里的信息是通过存放在...
    99+
    2024-04-02
  • 一文彻底理清session、cookie、token的区别
    目录前言1.为什么会有它们?2.什么是 cookie?3.什么是 session?4.cookie 和 session 的区别?5.token 是什么?总结附:cookie/sess...
    99+
    2023-02-27
    session cookie 区别 cookie与session cookie与token区别
  • php中cookie与session的区别是什么
    本篇内容主要讲解“php中cookie与session的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php中cookie与session的区别是什么”吧!本教程操作环境:window...
    99+
    2023-06-21
  • Java中Cookie和Session的区别是什么
    这篇文章主要介绍“Java中Cookie和Session的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java中Cookie和Session的区别是什么”文章能帮助大家解决问题。会话技术...
    99+
    2023-07-02
  • cookie和session有什么区别
    这篇文章给大家分享的是有关cookie和session有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是cookie、session cookie :存储在用户端的一-小段文本,用于服务器识别用户的一...
    99+
    2023-06-15
  • session和cookie有什么区别
    本篇内容主要讲解“session和cookie有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“session和cookie有什么区别”吧!session和cookie有什么区别呢?由于H...
    99+
    2023-06-02
  • Session和Cookie的区别与联系是什么
    Session和Cookie是两种不同的机制,用于在Web应用中保存用户状态信息。区别:1. 存储位置:Cookie存储在客户端(浏...
    99+
    2023-08-15
    Session Cookie
  • Token与session的区别
    一、什么是token? 在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系 统使用。 Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成 一个Toke n便将此T...
    99+
    2023-09-22
    服务器 运维 spring mvc
  • php中cookie与session有什么区别
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑无论是在系统运维还是 PHP 开发人员的面试中,经常会被问到 Session 和 Cookie 在 PHP 中的区别?下面我们就来总结一下:Cookie 仅由客户端生成...
    99+
    2016-03-20
    php cookie session
  • 在java中session和cookie有什么区别
    java中session和cookie的区别:session是存储在服务器端,cookie是存储在客户端的。session的安全性要比cookie高。获取session里的信息是通过存放在会话cookie里的sessionid获取的。coo...
    99+
    2024-04-02
  • 怎么分析cookie和session的区别
    这篇文章给大家介绍怎么分析cookie和session的区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1,cookie保存在浏览器(客户端)中,服务器知道数据,cookie可以通过工具随意修改,不安全2,Sessi...
    99+
    2023-06-04
  • Cookie与session的区别有哪些
    Cookie和Session是Web开发中常用的两种技术,用于在客户端和服务器之间传递数据。它们的主要区别如下:1. 存储位置:- ...
    99+
    2023-09-15
    Cookie
  • session和application的区别是什么
    Session和Application都是Web开发中的概念,但它们有着不同的作用和使用方式。1. Session(会话):- Se...
    99+
    2023-09-27
    session
  • 关于JWT与cookie和token的区别说明
    目录一. cookieA)cookie如何认证B)cookie认证方式的不足之处二. tokenA)token的认证过程B)token认证方式的特点三. JWTA)JWT介绍B)JW...
    99+
    2024-04-02
  • php中cookie与session的区别点总结
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑 无论是在系统运维还是 PHP 开发人员的面试中,经常会被问到 Session 和 Cookie 在 PHP 中的区别?下面我们就来总结一下: Cookie 仅由客户端...
    99+
    2015-11-19
    php cookie session
  • cookie和session的工作原理和区别
    本篇内容主要讲解“cookie和session的工作原理和区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“cookie和session的工作原理和区别”吧!为...
    99+
    2024-04-02
  • php中cookie和session的区别有哪些
    小编给大家分享一下php中cookie和session的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!cookie:在网站中,http请求是无状态的。也就是说即使第一次和服务器连接并且登录成功后,第二次请求服务器...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作