0

我在我的节点 Web 应用程序中使用与 RedisStore 的快速会话。

NodeJs 版本:4.2.4 JS:Es6

“express”:“^4.13.3”,“express-session”:“ https://github.com/echorohit/session/tarball/1d22749aa46280a24a4ee3a993ba0772e6e1e2df ”,“ioredis”:“^1.13.0”,“connect-redis” ": "^3.0.1",

我观察到会话有时会在用户之间混淆。我正在使用 newrelic 洞察力来记录一些指标,所以我也用它来调试问题。

这是我的发现。

来自 express-session 的 store.js 的代码片段

 Store.prototype.regenerate = function(req, fn){
     var self = this;
     //CHECKPOINT 1
     log.addNewRelicCustomParameter("CHECKPOINT1",req.sessionID);
     this.destroy(req.sessionID, function(err){
        //CHECKPOINT 2
        log.addNewRelicCustomParameter("CHECKPOINT2",req.sessionID);
        self.generate(req, fn);
        fn(err);
     });
};

CHECKPOINT 1。 req.sessionID 是正确的,但在CHECKPOINT 2很奇怪。 req.sessionID 被打印用于在新的 relic 日志中同时执行的其他请求。

我确信这是会话混淆的原因。但无法进一步调试以找到它的根本原因。请帮助我提示如何找到问题的根本原因。不确定这是否真的是封闭范围问题。

4

1 回答 1

0

看起来实际上没有问题!

如果您在每个检查点设置断点,则可以预期有时req.sessionID断点之间的断点会有所不同,因为第二个断点位于异步回调中。

于 2016-09-30T19:23:18.497 回答