一、登录标记
1.会话技术(cookie和session)
cookie是浏览器存储数据!
1.1 cookie会话跟踪
cookie:服务器自动将cookie响应给浏览器,浏览器接收到响应的数据后,自动将cookie存储在浏览器本地;在后续请求当中,浏览器会自动的将cookie携带到服务端(在请求头中携带)。
Cookie进行会话跟踪最核心的两点:请求头和响应头!
响应头set-cookie是用来设置cookie数据(服务器端);请求头cookie用来携带cookie数据(浏览器端)。
优缺点如下:
优点 | 缺点 |
---|---|
HTTP协议中支持的技术 | 移动端APP无法使用cookie |
– | 不安全,用户可以自己禁用cookie |
– | cookie不能跨域 |
什么是跨域:从下图看出两个域名不同的服务器不能共享cookie。
1.2 session会话跟踪
session的底层还是基于cookie的。session是服务器存储数据(存储用户的详细信息,同时给用户分配一个sessionId),此时服务器就把 sessionId(重要) 返回给浏览器,后续再访问浏览器中的页面时就会在请求上自动带上sessionId,进一步服务器就知道哪个用户在操作了。
过程如下:
具体流程:
在登录认证成功后,服务器会创建一个唯一的JSESSIONID,并将相关的用户信息存储在HttpSession对象(服务器端)中,然后将JSESSIONID以setCookie的方式发送给客户端保存。客户端在后续的请求中会携带该Cookie,服务器通过解析Cookie中的JSESSIONID来获取对应的HttpSession对象,从而实现用户身份的认证和状态的保持。
过程详解:
①、这是服务器端的响应,通过session中添加一个(sessionid)key-value记录,在通过set-cookie设置。
②、可以看到浏览器端(客户端)存储了cookie信息。
③、浏览器端发送请求,可以看到传递了cookie的值
优缺点如下:
优点 | 缺点 |
---|---|
存储在服务器端,安全 | 服务器集群环境下无法直接使用session |
– | cookie的缺点 |
1.3 session与cookie对比
理解:
主要区别就是cookie在第一次请求后,服务端会 将用户的信息都包含在cookie中 响应给浏览器,浏览器后续请求,都会携带这个cookie,服务器端通过cookie中携带的数据区分用户。
而session是创建一个特殊的cookie,即sessionid,而其他信息都在服务器端,后续浏览器发送请求时,服务器端只会根据sessionid来区分不同用户。
所以说session是更安全,因为cookie有伪造的风险,因为数据都在浏览器本地。
2.令牌技术
浏览器发请求,执行登录操作,用户登录完成之后,生成一个jwt令牌,然后将令牌下发给客户端,客户端将令牌存储起来,在以后的每一次请求当中,将令牌携带(在请求头中)到服务端,服务器端接收到请求后,对请求进行统一拦截,获取到请求中的令牌,再校验真伪,若令牌无效直接相应错误结果,若有效,再让他去访问对应的业务接口。
2.1 组成
2.1 令牌生成和校验
Header和payload是base64编码,可以直接解码,最后一部分是数字签名部分。
校验如下: