为了账号安全,请及时绑定邮箱和手机立即绑定

没有加载 mongoStore模块来保持会话, 但仍然可以保持会话(session 存mongodb)


582281560001c82e04590049.jpg

582281570001ac2503050111.jpg

5822815800010acd03990186.jpg

登录后的首页 

582281570001207405000103.jpg

重启grunt后

5822811600014ffc05000212.jpg

我在想是不是由于cookie-session或者cookie-parser 已经有储存功能了?

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

我又查了下mongodb,里面有session数据库,但是没有数据:

(movie是我用的表)

582281160001b60401740067.jpg

5822811600012c4302920034.jpg


正在回答

1 回答

首先保持会话的简要过程和目的如下:

  1. 浏览器向服务端发出请求,服务器端在session表中建立一条数据,其中userName 信息为空。

  2. 浏览器端进行登录操作,服务器端验证用户名密码存在且匹配,将用户名存入step1 中的userName 字段。

  3. 服务器返回response,response header中 包含reset cookie 的信息

  4. 浏览器端收到响应后,cookie被重置(因为response header 里有reset cookie的信息),包含了可用的session信息

  5. 以后每次从同一个浏览器发出的请求,request header 里都会携带session信息。服务器端收到请求后,parse cookie, 如果发现req.session.user 信息在session表中存在,则认为这是一个可靠的会话,用户可以进行操作无需重新登录。

再说你的问题:

  1. 只要你做了上面的step3, 即重置了cookie,那么以后从同一个浏览器发出的请求就都携带user 信息了。但是这些信息并不代表着一个可靠的会话,因为你的session表里没有内容,也就是说你没有验证req.session.user是否是一个已经登录过的用户

  2. 在服务器重启后,如果你还是使用同一个浏览器发出请求,那么请求的头信息不变, req.session.user依然存在。这就是为什么你觉得会话被保持了。

多说一句自己踩过的坑:

验证用户的session信息一定要在server端做,因为客户端的头信息是可以被随意篡改的。 


4 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
node建站攻略(二期)——网站升级
  • 参与学习       51940    人
  • 解答问题       408    个

帮助你深入前后端开发留下的迷惑,为进一步自学打下基础

进入课程

没有加载 mongoStore模块来保持会话, 但仍然可以保持会话(session 存mongodb)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信