0

ノード Web アプリケーションで、RedisStore で Express-Session を使用しています。

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);
     });
};

チェックポイント1でreq.sessionIDは正しかったが、奇妙にチェックポイント2で req.sessionID が新しい遺物ログで同時に実行されている他のリクエストに対して出力されました。

これがセッションの混乱の原因であると確信しています。しかし、根本的な原因を見つけるためにさらにデバッグすることはできません。問題の根本原因を突き止めるためのヒントを教えてください。これが本当にクロージャー スコープの問題であるかどうかはわかりません。

4

1 に答える 1

0

実際問題ないようです!

各チェックポイントにブレークポイントを設定するとreq.sessionID、2 番目のブレークポイントが非同期コールバック内にあるため、ブレークポイント間で異なることが予想されます。

于 2016-09-30T19:23:18.497 に答える