Node.js では、通常、express-session パッケージを使用してセッションを使用および管理し、サーバーとクライアント ブラウザー間のセッション状態を保存します。では、ユーザーが現在のページを更新するか、ページ上のボタンをクリックするときにセッションの有効期限を設定するにはどうすればよいでしょうか? ASP.NET のセッション状態と同様に、ページが一定期間アクティブである限り、セッションは期限切れになりません。この機能は、次のコードを通じて実現できます。次のミドルウェアを Node.js コードに追加します。
// use this middleware to reset cookie expiration time // when user hit page every time app.use(function(req, res, next){ req.session._garbage = Date(); req.session.touch(); next(); });
app.use(session({ secret: 'test', resave: false, saveUninitialized: true, cookie:{ maxAge: 1000*60*60 // default session expiration is set to 1 hour }, store: new MemcachedStore({ hosts: ['127.0.0.1:9000'], prefix: 'test_' }) }));
Node.js セッション ストレージのいくつかの方法についてお話しましょう
Node.js セッション ストアには、次のようなパフォーマンス テスト用のオプションのメソッドが 4 つあります。
Concurrency: 1 none 4484.86 [#/sec] memory 2144.15 [#/sec] redis 1891.96 [#/sec] mongo 710.85 [#/sec] Concurrency: 10 none 5737.21 [#/sec] memory 3336.45 [#/sec] redis 3164.84 [#/sec] mongo 1783.65 [#/sec] Concurrency: 100 none 5500.41 [#/sec] memory 3274.33 [#/sec] redis 3269.49 [#/sec] mongo 2416.72 [#/sec] Concurrency: 500 none 5008.14 [#/sec] memory 3137.93 [#/sec] redis 3122.37 [#/sec] mongo 2258.21 [#/sec]
セッションで使用されるページは非常に単純なページです。
app.get("/", function(req,res){ if ( req.session && req.session.user_id){ req.session.no = req.session.user_id; } else { throw Error('error'); } res.send("No: " + req.session.no);});
Redis ストア構成:
app.use(express.session({ store: new RedisStore({ host: 'localhost', port: 6379, db: 2, }), secret: 'hello'}));
app.use(express.cookieParser());app.use(express.session({ store: new MongoStore({ url: 'mongodb://localhost/test-session' }), secret: 'hello'}));