众所周知,http请求是无状态的,每次发送请求的时候,对方都不知道你是谁。
实际需求中,我们登入系统后,需要系统记住是谁登入了,方便系统的权限管理,保证系统的安全性。
一、Session登入
Session是一块保存在服务器端的内存空间,一般用于保存用户的会话信息!
实现方式: \color{red} {实现方式:} 实现方式:
- 1、用户输入用户名密码点击登入按钮,服务端创建session,把用户信息存入session中。
- 2、服务端自动返回给浏览器一个sessionID,存入浏览器的cookie中。
下次用户再来访问的话会带着这个cookie中的sessionID,服务器通过sessionID去寻找对应的session,如果session中已经有了这个用户的登陆信息,则说明用户已经登陆过了。 - 3、登入成功后的每次请求,都会带着sessionID到服务端,服务的判断session中的用户信息是否为空,如果不为空,则已登入。
s e s s i o n 作为登入的弊处: \color{red} {session作为登入的弊处:} session作为登入的弊处:
- 1、服务器压力大,通常Session是存储在内存中的,每个用户通过认证之后都会将session数据保存在服务器的内存中,而当用户量增大时,服务器的压力增大。
- 2、重启服务,session清空,需要重新登入。
- 3、Session共享:现在很多应用都是分布式集群,需要我们做额外的操作进行Session共享。
虽然session登入有弊处,但是一些小的项目,仍然用session作为登入的首选
二、Token实现登入
Token是现在最常用的方式。
实现方式: \color{red} {实现方式:} 实现方式:
-
1、用户发出登录请求,带着用户名和密码到服务器进行验证,服务器验证成功就在后台生成一个token返回给客户端。Token就是一个加密后的字符串。
-
2、客户端将token存储到cookie中,服务端将token存储到redis中,可以设置存储token的有效期。
-
3、后续客户端的每次请求资源都必须携带token,服务端接收到请求首先校验是否携带token,以及token是否和redis中的匹配,若不存在或不匹配直接拦截返回错误信息(如未认证)。
参考原文链接:https://www.cnblogs.com/54chensongxia/archive/2020/08/12/13491214.html 原文中有关于JWT的认证用法。JWT和Token本质区别并不大。