1、单节点部署,服务端存储的Session何时消失?
session超时之后才会消失。高并发的情况下,会话过多,服务端会存储大量的session,浪费内存,服务器压力过大。
2、多节点部署(负载均衡)
(1)软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。
(2)常见的有nginx负载均衡服务器,轮训制度。
(3)负载均衡的情况下,每个Tomcat服务器有自己的Session,Session默认不共享。后面又提出Session同步。
3、Session机制的缺点?
(1)session超时之后才会消失。高并发的情况下,会话过多,服务端会存储大量的session,浪费内存,服务器压力过大。
(2)负载均衡的情况下,每个Tomcat服务器有自己的Session,Session默认不共享。
(3)Session同步的过程复杂,且分散了集群的计算能力,通俗的讲就是副作用太大,杀鸡用了牛刀,不划算。
(4)配合Session使用的Cookie是明文存储,容器很容易劫持,获取Cookie中信息,CSRF(跨站请求伪造)攻击很容易。
4、解决Session机制缺点的方法:
专门搞一台缓存服务器redis来专门记录Session。但几乎废掉了Servlet里面的Session了,等于重新搞了一套。
此方的风险就是缓存服务器一旦爆掉就完了,所有用户都登陆不上了,后面针对这种情况又提出弄多台缓存服务器来降低这种风险的方法,但是太复杂了。
可以看出在负载均衡或者分布式的情况下,Session限制了架构的伸缩能力,所以架构师便决定放弃Session。开始用全新的Token。
5、Token优势:
Token的本质和Session一样,但Token在服务端不需要存储,服务器省去了很多内存资源。
6、如何知道Token是服务器签发的呢?
Token是无状态的。
Token是自验证的。
Token里面是有信息的。
token验证机制:
- 登录时,客户端通过用户名与密码请求登录
- 服务端收到请求去验证用户名与密码
- 验证通过,服务端会签发一个Token,再把这个Token以响应发给客户端.
- 客户端收到Token,存储到本地,如Cookie,SessionStorage,LocalStorage.我们是存在cookie
- 客户端每次像服务器请求API接口时候,都要带上Token.
- 客户端每次跳转路由的时候也要验证Token登录态
- 服务端收到请求,验证Token,如果通过就返回数据,否则提示报错信息.