在学习后端的时候,我发现一个问题,那就是我写的接口,不管什么人都可以调用,没有登录也可以调用。那意味着可以通过简单的抓包工具抓出我的接口和参数,然后就可以获取到数据信息,以及什么dos攻击之类的。
总之就是感觉很不安全。于是我想到每个接口都传入用户信息,并且数据库中添加用户的登录状态字段,在执行相关操作之前都查一次数据库用户是否处于登录状态。
但这样一来,会频繁的访问数据库,而且查用户登录状态的代码也需要在每个接口前写一份。我个人觉得不是很合理。于是想到是不是可以在服务端拿到接口请求的入口处进行统一验证。然后就想到听说过的一个名词'token'。
上网一番查证后,发现我的这种问题早就有解决方案了。传统的session验证,现在的token验证。但我没搞明白的是,这些验证和密码验证有什么区别吗?session验证无非是将用户信息存到了session中,减少了数据库的交互,但随之带来也有信息持久化问题,以及session重置问题,看上去不是很好用。
而token验证我更是没有看懂,token信息是将用户信息加密成一段字符串,能加密就能解密,那和用户信息也没啥区别啊。其次,有的文章说token生成后要存储到缓存中,如redis,session啥的,那和session存储有啥区别?多了一层加密?还有的人说token不需要存储在服务端,那我就更不懂了,本质上只要涉及到用户的验证,就离不开存储用户信息,不管是存缓存还是存数据库。token不存储,那你怎么验证用户是当前用户呢?
谁懂的来给我解答一下?

什么是token令牌?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- love. 2021-12-03 11:03关注
安全验证本来就不应该是长期的,所以用session完全可以的。
token安全的地方是它可以自动失效,设个时间在时间结束后自动失效,安全性大涨。
token和session本质上的区别就是:session是每个人一个名字,而token是一个部门共用一个部门名称。比如有一个大门,用session就是每个人都有一个名称这样人一多大门每次都要去数据库中查询名称,这样就反应延迟了;如果用token就是有一款令牌,只要有令牌都可以打开就不用一个一个的去查询数据库那庞大的数据了,只需要一对一比较。
Redis用来存储密码这些东西还是比较安全的,具体的搞忘了。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报