小白提个问,用mongodb存sessionid
发布于 1 个月前 作者 hxc1995 453 次浏览 来自 问答

用mongodb存sessionid的情况下, 是要每次在处理请求的时后用取到cookie的id值去mongodb里相应存sessionid的集合中找有没有值,来判断有没有登陆吗

4 回复

是的,但是太影响效率 From Noder

@TimLiu1 我准备用jwt,这样就不用每次查数据库了. https://cnodejs.org/topic/557d647216839d2d53936351

所有认证方案,其核心都是一样的:

服务端生成凭证 -> 响应给客户端(cookie,header等等) -> 客户端下次请求带上凭证 -> 服务端确定凭证真实有效…

凭证一般有客户端的盖章(就是加密),验证时,如果简单来说就是看看盖章是不是真的,但因为章可以有假但服务器看不出来,所以更保险的是服务器再查一下自己的帐本.

如果可以保证盖伪造,那就可以省去查帐本这步.

  1. 纯cookie方案 登录成功,服务端将用户名等信息加密后放到cookie,客户端以后请求带上cookie,服务端解密得到用户名等,认证成功

此方案的优点是不用查数据库,存在的问题是 1 cookie不适合放太多内容,某些端甚至不支持cookie 2 加密算法如果被破解,可以伪造登录状态

  1. sessioni方案 为了解决cookie不能放太多内容的问题,产生也session,其实就是把登录后每次要用到的内容以sessionid为key放在服务端(存放方式可以是数据库,redis等等), cookie只传输sessionid (实际上,sessionid也可以用其它方式传输,比如url,header) 该方案存在的问题: 1 . 后端多一次查询session的过程. 当然sessionID传输和存储时的安全性是跟cookie一样的。但因为多了一次服务端查询,所以纯伪造的可能性会减低,一般只能截获使用。
  2. 所谓的token认证 其实也就是cookie认证,相对于cookie,只是换汤不换药,它只是把传输和保存的方式改了,可以说兼容性好了,但安全性并没有太大变化,安全性的关键还是加解密的方法和强度。 同样,使用token,还要加密,那你能放在里面的东西也不能多,那你认证成功后,最多也只能获得用户ID,你要继续业务,还是要大量的查询后台的存储。
回到顶部