why the node js session can't be updated

最近项目中有个需求,需要用户登录(自动登录,通过传入某一个唯一的UUID)后跳转到某一个指定的页面。

具体到项目中就是做2个步骤:

1. 用户通过 http://10.10.8.205/autologinProxy?key=##########. node js server 端侦听到router "autologinproxy".就会在server端进行登录,

然后把用户的详细信息,积分信息,级别信息存入到node js session中。

2.用户登录完成后在server 端redirect到新的页面 http://10.10.8.205/home. 在这个页面里会获取step 1中保存的用户信息来显示UI。

而实际情况是step2中访问不到step 1 session中的用户信息,项目中用的是express-session,session 保存在mysql 数据库中。然后查看sessions表,发现step1 后

是有一条记录包含了详细信息,积分信息,级别信息。但后面又发现step2中有新的session记录保存,并且是没有详细信息,积分信息,级别信息的。

这样就证明2步中不是同一个session.什么原因造成的了?奇怪了,一直都是可以work的。

最后经过1个小时的比对,终于发现的问题所在。原来我在第一步输入的url是https://10.10.8.205/autologinProxy?key=##########,多了一个s.

为什么也可以跳转了?因为我们使用了ngnix转发https和http的路由都会代理到http://10.10.8.205:8081去处理。然后在第二步redirect时后是通过

req.protocal+"://"+req.get('host')

来获得要跳转路径的前缀.这样相当于redirect到http://10.10.8.205/home. 原来发生了跨域访问,第一次的是https而第二次是http. sessionid不同,两个不同session.

用回http://10.10.8.205/autologinProxy?key=##########.就一切正常了。看来以后要细心些,一个s可能要花好多时间来debug.

 

posted @ 2020-06-23 15:22  老碼農的涅槃  阅读(120)  评论(0)    收藏  举报