1.cookie + session
实现原理:
为了识别请求是来自哪个用户/客户端,后台会生产一个session来保存会话状态,session依靠不同的sessionId来进行区分,sessionId会在第一次请求后保存到客户端,之后的请求都要在cookie中带上sessionId,服务器端会解析Cookie获取sessionId进行识别。
优点:
- 技术上实现简单
缺点:
- 不适合分布式应用,跨平台性差
- Cookie传输会影响通信性能
- HTTP协议本身是无状态的,而Cookie+Session机制硬生生的给加了状态进去,不符合设计理念
- 存在安全风险:因为Cookie是存储在客户端的,客户端可以随意更改Cookie,存在伪造请求的风险
2.token
实现原理:
使用用户名+密码的方式进行登录
服务器验证用户信息
服务器通过验证发送给用户一个token
客户端存储token值,并在请求头添加token
再次请求的时候服务端验证token值
优点:
- 真正的无状态,适合分布式,扩展性好
- 性能高,安全性好
缺点:
- 无法在服务端注销,很难解决劫持问题