2

Express.js からセッションを使用したいと思います。req.session.id からセッション ID をキャッチできることはわかっています。また、この ID が常に異なることも知っています (ルートにアクセスするたびに):

一部の人々がセッションを取得してグローバルに保存することを推奨しているのを見ましたが、問題は(私が間違っている場合を除いて)、ユーザーがアプリケーションにこの方法で接続したときにセッションを保存した場合です:

app.get('/init', function(req, res) {                                                                                                                                    
        global.session = req.session;                                                                                                                                                                                                                                                        
    });

User_1 がアプリケーションに接続し、次に User_2 がアプリケーションに接続し、User_1 がまだそこにある場合、global.session には User_1 の場合でも User_2 セッションの値が含まれますか?

私が正しければ、セッションを適切に保存する方法は? init ルートから req.session.id でインデックス付けされた配列を考えたのですが、これは同じルートに同じユーザーが訪れても必ず違うので (正常ですか?)、このように処理することは不可能です。

セッションを管理するために見つけた最良の方法は何ですか?

ありがとう !

4

1 に答える 1

1

セッションをグローバル変数に保存しないでください。これは、サイトへの後続の各訪問者が同じ変数を使用および変更することを意味するためです (受信したすべての要求を処理するために、express の同じインスタンスを使用します)。express の組み込みミドルウェアを使用できます。アプリケーションの開発中にセッションをメモリに保存します。ルートの宣言を開始する前に、次のミドルウェアを配置するだけです。

app.use(express.cookieParser()); /* Parses cookies. */
app.use(express.cookieSession({ secret: 'yoursecret' })); /* Handles sessions stored in your cookies. */
// ... your other middleware

app.get('/', function(req, res) {
    if (req.session) {
        res.json(req.session);
    } else {
        res.send('You have no session.');
    }
});

本番環境では、Redis などを使用してセッションを保存することをお勧めします。

于 2012-12-31T01:39:58.743 に答える