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.

浙公网安备 33010602011771号