都跟维持状态信息有关
Cookie:
存储在客户端,也就是说存储在浏览器中,
优点:
1、存储在客户端。
2、帮助客户端和服务器之间维护状态信息。
弊端:
1、安全风险:有被串改的风险。(当然,也可以加密,一旦用户知道加密规则,也可以进行篡改)
2、容量限制: 4KB。
3、可用限制:用户可能禁用。
Session:
使用过程:1、当前端发起登录请求,会将用户名与密码传送给后端
2、后端进行验证,如果验证成功了,后端就可以从session中存入,当前用户信息
3、然后进行响应,会在响应头里边存入一个 叫set-Cookie的属性,再把Session的唯一ID,放在属性当中
4、前端 自动在 cookie当中存入sessionID,下次登陆成功后,下一次的请求 ,自动的在请求头中,设置cookie的信息,服务端拿到cookie当中的 session ID就可以得到当前这一次请求,所对应的session信息,就可以获取到当前登录的用户信息,以维持当前的登陆状态。
Session使用是非常方便的,我们只需要在后端存入当前用户的信息,并且不仅仅限于字符串,可以存入整个的 用户对象,下次获取是非常方便的,WEB服务器是会 自动的在响应头里存入set-Cookie的属性,以及当前的session的唯一Id, 浏览器如果发现响应头里 有set-cookie 这个属性,它会自动把 sessionID 存入到 cookie中,不需要再浏览器这一端,调用setCookie()方法,响应头中的set-cookie()命令,它会自动帮我们存出,并且浏览器下一次的请求也会把 安全域它的cookie,传到服务器端,整个过程都是自动完成的,我们只管往Session中存数据即可
优点:
1、安全性高:存储在服务器端
2、容量大:可以保存对象
弊端:
1、占用服务器资源
2、扩展性差(分布式集群)
3、依然需要依赖cookie,跨域限制
Token:
JWT
header:私钥,加密方式
payload:加密后的数据载体
signature:header + payload加密。
JWT的使用过程:
1、前端发起登录请求
2、后端进行认证,认证成功会创建一个JWT的字符串,它会包含三段信息
3、然后会把创建好的JWT返回给前端,前端拿到JWT的TOKEN,如果你想要数据的载体,只要进行分割,分割之后,拿到第二段(第二段保存的是数据的载体),拿到之后,通过Base64的方式进行解码即可
4、登录成功之后,后续的请求,只需要在请求头当中,设置一个跟后端约束的属性,
再把响应的JWT TOKEN传入到后端,后端拿到Token,就会进行JWT的解密,然后会验证 signature,如果检验成功,信息没有被篡改,就会进行放行,正常的进行响应,使用JWT,我们不用依赖后端的任何存储,也不需要前端的任何存储,就是一个加密之后的字符串而已