前后端分离框架中用户状态控制的解决过程

白话:

        习惯了前后端统一部署的方式,用户的信息都是放在session中或者使用一些权限框架,从没有关注过session的机制,也不知道这样的方式是如何保证用户信息的安全性的。反正账号密码一登录就完事儿,然后用户的一些权限什么的信息都是放在session中,什么时候用什么时候随便取就可以了。如今开发过程中使用到了前后端分离的模式,对这些问题一思考,就觉得自己的知识真是经不起任何敲打,完全不明白。

还是白话:

前后端分离中,所有前端请求的URL都是无状态的,这样的好处就是可以扩展到多台服务器上。

网上查阅资料,都是使用token的方式来实现模拟session的效果,我一直在想,sessionId的是通过cookie的方式来前后后前传递的,那么解决完跨域的问题之后,是否也可以这样传递,最终没找到解决方案。

================================================================================================

问:前后端分离模式下如何保持会话?

答:使用token来模拟sessionID来模拟保持会话。

问:后台如何生成token?前台保存token?

答:生成的token保证唯一即可,在登录成功后作为返回值传给前台。前台登录成功接收到token之后,可以将该值保存到cookies中或者local storage中。

问:如何传递token?

答:传统模式下sessionID是存储在cookies中的,并且会在请求中默认传递。为了模拟session保持会话,token就相当于sessionID,我们需要在每次发送请求的时候传递token,因为前后分离的模式下,使用ajax来请求后台数据,我们可以将token存放在参数中,或者我们可以将token放在请求头中向后台传递,这样做仅仅是为了保证token尽可能的不被恶意读取到。

问:后台如何使用token保持会话?

答:token值在生成的时候,并发不大的情况下,可以将用户的登录信息存入数据库,设置有效时间,token作为其唯一标识。当请求来了,通过token去查询用户信息,并判断是否过期。如果并发量大,可以考虑使用redis缓存,此时token作为key值,将用户的信息保存在redis当中,redis本身可以设置过期时间。

问:使用token如何保证安全?有没有存在恶意拿到token去模拟用户登录进而获取用户重要信息?

答:个人猜测:这种情况是可能的,因为前后分离的网站,都设置了跨域,所以浏览器的同源策略就失去了效果。这个我想到的就是自己手动模拟同源,但是没有实验过,项目没有必要这么使用。

 

以上都是个人的思考和解决过程,有不合适的地方大家一起研究讨论。

======================补充验证方式======

之前一直在想,就算我增加了token,那么黑客依然可以通过web中取到,不管我放在cookie中还是ihead中。所以,我们应该有一个验证机制,在第一次生成token的时候,就要将token与请求过来的IP进行绑定,每次验证的时候都要拿到这IP去用作解码的密钥,这样就能保证这个token下的请求都是来自于同一个网站。我觉得这样就很好。

======================================================================

种子需要落在地上,卑微进土里,才能生根发芽。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值