初识token
token是一种计算机术语。叫做令牌
起源
- 因为有些场景下,客户端需要频繁地向服务器请求数据,
- 服务器就也同样需要频繁地向数据库去查询用户的账号密码做对比,
- 然后根据判断的结果,给出不同的提示/反馈。
所以诞生了token
定义
token是由服务端产生的一串字符串,
然后把这个字符串当作客户端进行请求的一个令牌。
流程
- 客户端第一次使用用户名和密码来登录
- 服务器收到用户登录的请求之后,去验证用户名与密码
- 如果验证通过,那么服务器会产生一个token,然后把这个token返回给客户端
- 客户端拿到了这个token之后,可以把它放到cookie/local storage里面保存起来。
- 总之以后客户端再来请求数据的时候就只需要携带这个token就可以了。就不用再每次提交用户名和密码。
- 从此之后,服务器如果收到了客户端的请求,就会去验证客户端请求里面带着的token,如果验证通过,就向客户端返回数据。就不需要再像第一次一样要访问数据来对比用户名和密码。
好处/目的
使用token,就是为了能减轻服务器的压力。
可以让服务器不用频繁的查询数据库。增强服务器的健壮性。
使用方式
1.(推荐使用)设备号/设备MAC地址作为token
- 也就是客户端在登录的时候,获取设备的设备号/mac地址,然后作为参数传递到服务端
- 服务端接收到参数之后,用一个变量来接收它,并把它作为token保存到数据库。
并且把这个token设置在session中,客户端的每次请求都会被统一拦截。
然后把客户端传递的token和服务器端session中的token进行对比。
如果相同则放行,不同则拒绝。 - 这时候客户端和服务器端就统一了一个唯一标识token,并且每一个设备都有一个唯一的会话。
缺点
- 缺点就是客户端需要拿自己的设备号/mac地址作为参数传给服务器,服务器还需要保存这个参数
- 如果网络不好/并发请求高的时候就可能会重复提交数据(可以把token放入到session中来验证是否重复提交,因为session只能有一个对象)
优点
- 优点就是客户端不需要重新登录,一次登录之后就可以一直使用。
- 如果有超时的问题,就让服务器来解决。
- 解决方法就是,如果服务器的token超时了,那么服务器只要把客户端传递的token向数据库中查询,同时赋值给token,这样token就会重新计时。
2.用session值作为token
- 这种方式下,客户端只需要携带用户名和密码就可以
- 然后服务器接收到用户名密码之后进行判断,判断通过了之后就将本地获取的sessionID作为token返回给客户端,客户端以后访问只需要携带请求数据就可以。
好处
不需要存储数据,更加方便
缺点
如果session过期了,就需要重新登录