认识一下 Cookie、Session、Token 在实际中的应用

引言

提到用户登陆态这个问题,不免就会说起 CookieSessionToken 等三个知识点。因此,今天就略微总结一下这三者在这个场景下的应用。javascript

1、Cookie

我想做为一个前端,对上述的三者中,最熟悉的就是 Cookie 了。由于前端能够本身操做 Cookie,而后实现本身想要的需求。不过,在不少时候,千万注意不要用 Cookie 存储一些隐私信息,由于一旦被 XSS (脚本注入)就 GG前端

回到正题,Cookie 在须要记录用户登陆态的场景下,并非前端直接存储用户信息,而是在第一次请求登陆时,后端将这个用户的信息存储在 Cookie 中(能够设置有效时间、域名等等),而且在响应头中一块儿发送给前端,而后前端在以后的请求中,都会在请求报文中携带这个 Cookie (携带的过程,是浏览器自动判断后端是否在响应报文中存在 Set-Cookie,存在则一样会在以后的请求报文中携带 Set-Cookie),因此以后,服务端判断是否存在这个 Cookie ,存在则直接读取响应的用户信息,不存在则进行登陆操做。从而,完成整个的登陆状态的记录。java

须要注意的是,后端在 Set-Cookie 的时候,必定要设置这个 Cookiehttp-only,即这个 Cookie 只能被 HTTP 协议读取,禁止前端以任何方式读取。算法

2、Session

对于 Session 这个名称,若是没有了解过的同窗可能会一脸懵。相比较 Cookie 是存储在客户端不一样的是,Session 是存储在后端的,具体的存储方式,Session 通常是在 TomcatJetty 等容器中进行管理。后端

一样是记录用户登陆态,Session 也会用到 Cookie。不过不一样于 Cookie 的是,以 Session 的方式记录用户登陆态,会将 用户的信息存储在 Session 中,而且会将 SessionId 塞到 Cookie 中,这个 Cookie 一样会出如今响应报文中(一样须要设置 http-only),以后发生的就和 Cookie 记录登陆态的过程相似,只不过读取用户信息是根据 SessionId 来读取对应的 Session 中的用户信息。浏览器

3、Token

Token 形式记录登陆态和 Cookie 记录登陆态有点相似,可是不一样的是,Token 并非直接存储用户信息,而是将用户信息编码后,经过响应报文传给前端,以后每一次请求,请求报文中都会带有这段编码信息,后端经过解码得到用户信息,这个方法也被称做 JWTJson Web Token)。(因此 Token 适合分布式微服务,即服务端不须要保存特定的用户信息)分布式

值得一提的是 JWT 是由三个部分组成: 1.Header,一般是一个 JSON 对象,用于描述 JWT ,例如微服务

{
		"alg": "HS256",
		"typ": "JWT"
	}
复制代码

alg 属性表明进行加密的签名的算法,默认是 HS256;type 表明这个令牌的类别。编码

2.Payload,是用于存放实际须要传输的数据,JWT 官方规定的字段以下:加密

iss: 签发人
	exp:过时时间
	sub:主题
	aud:受众
	nbf:生效时间
	iat:签发时间
	jti:编号
复制代码

你们可能会发现,没有咱们实际须要的特定字段,JWT 也容许咱们自定一些字段(例如用户名之类的)。

3.Signature,是用于对前面的两部分的数据进行签名,防止数据篡改。由服务端定义生成一个秘钥,而后将这三个部分进行签名算法加密,每一个部分经过 . 链接成一个字符串,经过响应报文发送给客户端。

相关文章
相关标签/搜索