7

私は Node.js サーバーを使用しており、Connect フレームワークで開発しています。セッションの固定を避けるために、一定の間隔で SID を再生成しようとしています。ドキュメントによると、まさにそれを行う必要があるreq.session.regenerateというメソッドがあります。

« セッションを再生成するには、メソッドを呼び出すだけです。完了すると、新しい SID とセッション インスタンスが req.session で初期化されます »

コード例:

req.session.regenerate(function(err){
    // will have a new session here
 });

上記のメソッドを呼び出した後、req.sessionID の値を確認しましたが、値が以前と同じであることがわかりました。

req.session.regenerate 内から sessionID を取得して端末に書き込もうとすると、新しい SID が取得されます。これはさらに困惑します ~ IE コールバックのスコープ内でのみ SID を生成する必要があるのはなぜですか? 値をグローバル変数に割り当てると、その値は未定義になります。

私が見落としているのは本当に明らかなことだと感じています。

どんな助けでも大歓迎です。

4

2 に答える 2

1

regenerate関数のコールバックで応答を送り返すだけです。セッションの再生成は非同期であるため、クライアントに戻ると、古いセッションが残ります。

req.session.regenerate(function(err) {
                                req.session.myid = "myvalue";
                                res.simpleJSON(200, status);
                        });
于 2012-02-16T05:32:50.443 に答える
1

おそらく、あなたの問題はこの問題に関連しています:

https://github.com/senchalabs/connect/pull/263

いずれにせよ、あなたが説明する動作は、問題で報告されているものとまったく同じです.

于 2011-04-23T01:14:39.333 に答える