1.用户认证
http是无状态协议,不保存用户状态
1)session认证
2)token认证
2.基于session的用户认证
(1)过程
1)用户名密码校验:client向serve发送 验证码,accout, password;并且进行验证
2)session存储数据:服务器验证通过后,在session(当前对话)中保存相关数据如用户昵称,登陆时间等。
3)服务器生成session ID:服务器随机生成唯一的session-id返回给用户,写入用户的cookie中
4)用户传回session ID:用户随后的每一次请求,都通过cookie将session-id传回服务器
5)服务器接收session ID: 找到前期保存用户相关的数据
(2)缺点
1)开销大:高并发情况下服务器开销大,每一个请求都需要开辟session,内存开销不断增加
2)可扩展性差:session存在与于服务器中,session中的关键信息会限制服务器的扩展和负载均衡,并且不支持跨域,对移动端支持不友好
3)安全性低:cookie机制容易遭受CSRF(跨站请求伪造)
3.基于token的用户认证
(1)过程
1)用户名密码校验:client向serve发送 验证码,accout, password;使用md5加密后进行验证
2)token生成:服务器端生成一个 token,将token 存放在 redis数据库中,再将这个 token 值返回给客户端。
3) token 存储:客户端将 token 存储在 local storage 或 session storage中 (小程序可以存放在 app.global )
4)用户有新的请求时,从storage中携带token发送到服务端进行验证
5)服务端验证token并且返回数据
ps:vue的axios中
4)将token设置为请求头;以后的请求中会自动添加该请求头
5)路由守卫:使用router-guide做权限校验,判断当前页面是否需要进行token验证
(2)token优点
1)无状态,可扩展:
服务器不存储session信息,所以服务器和用户信息没有关联(无session亲和性);
负载均衡服务器,用户请求可以传递到任何一台服务器上面;
支持跨域且支持移动端
2)安全性高:避免了基于session的CSRF
3)本质使用cpu算力换取内存