初学者说使用token和Session无论如何都会陷入进退两难的境地。 我知道开发中有这个,但我不知道为什么用那个。 因为不知道那个原理,所以今天带大家分析这个东西。
一、让我先解释一下他的意思:
1、token部署: token是在客户端频繁向服务端请求数据,服务端频繁访问数据库,查询和比较用户名和密码,判断用户名和密码是否正确,并相应提示的背景下产生的
2、token的定义: token是服务端生成的字符串,是客户端发出请求的令牌。 第一次登录后,服务器生成token并将其发送回客户端,然后客户端只需携带此token请求数据,无需再次携带用户名和密码。
3、使用token的目的: token的目的是为了减轻服务器压力,减少频繁的数据库查询,从而使服务器更加稳健。
一旦理解了token的意思,就更清楚地知道为什么用了他。
二、如何使用token?
这是本文的重点,这里介绍两种常用的方式。
1、使用设备编号/设备mac地址作为token (推荐)
客户端—客户端在登录时获取设备的设备号/mac地址,并将其作为参数传递给服务端。
服务端:服务端收到此参数后,用变量接收,将其作为token保存到数据库中,并将token设置为session。 客户端在每次请求时统一监听,将客户端传递的token与服务端session的token进行比较,如果相同则释放,如果不同则拒绝。
分析:客户端和服务端现在统一唯一的token,确保每个设备都有唯一的会话。 这种方法的缺点是,客户端必须传递设备号/Mac地址作为参数,同时也必须保存服务端,这一点的好处是客户端不需要重新登录,登录一次后就可以一直使用。 关于超时问题,服务端会处理,你怎么处理? 如果服务器的token超时,服务器只需将客户端传递的token查询数据库并将其分配给变量token,就会再次计算token的超时。
2、使用会话作为token
客户端:客户端只需使用用户名和密码登录。
服务端:服务端接收用户名和密码进行判断,如果正确,将本地获取的sessionID作为token返回客户端,客户端稍后可以携带请求数据。
分析:这种方式的好处是方便,不需要存储数据,但缺点是会话过期后,客户端必须再次登录才能访问数据。
三、使用中出现的问题和解决办法?
简要介绍了token的两种使用方法,在使用中遇到了各种问题。 token的第一种方法隐藏的问题是网络不好,或者同时请求可能会多次重新发送数据。
此问题的解决方案:应用session和token即可解决此问题。 怎么应用? 请看本说明:
session是在一个操作员操作时保持与服务端通信的唯一识别信息。 由于session可以锁定,因此它在同一操作者的多次请求期间始终保留同一对象,而不是多个对象。 如果同一操作员按多个请求进入,则session只能限制单向通行。
本文将token添加到session和session中,以验证同一操作员是否同时提出重复请求,在下一个请求到来时使用session的token验证请求中的token是否匹配,如果不匹配,则提交重复
这就是解决重复提交的方案。