In Node. js, we usually use the express-session package to use and manage sessions and save the session status between the server and the client browser. Then, how can we refresh the expiration time of the session when the user refreshes the current page or clicks the button on the page? Next, let's take a look at Node through this article. in js, we usually use the express-session package to use and manage sessions and save the session status between the server and the client browser. So how can we refresh the session expiration time when the user refreshes the current page or clicks the button on the page? Similar to the session Status in ASP. NET, as long as the page remains active for a certain period of time, the session will not expire. The following code implements this function. We Add the following middleware to the Node. js code:
// use this middleware to reset cookie expiration time// when user hit page every timeapp.use(function(req, res, next){req.session._garbage = Date();req.session.touch();next();});
In this way, when a request comes over, the middleware will re-Modify the expiration time of the session to achieve the expected results.
Then, add the session usage in the Code:
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_'})}));
The above session uses memcached as the session storage method, for how to use memcached can refer to the address on Github https://github.com/balor/connect-memcached
Of course, you can also use other session storage methods, such as memoryStore, redis, and mongoDB.
The following describes several methods for storing Node. js sessions.
Node. js session store has four optional performance tests:
Concurrency: 1none 4484.86 [#/sec] memory 2144.15 [#/sec] redis 1891.96 [#/sec] mongo 710.85 [#/sec] Concurrency: 10none 5737.21 [#/sec] memory 3336.45 [#/sec] redis 3164.84 [#/sec] mongo 1783.65 [#/sec] Concurrency: 100none 5500.41 [#/sec] memory 3274.33 [#/sec] redis 3269.49 [#/sec] mongo 2416.72 [#/sec] Concurrency: 500none 5008.14 [#/sec] memory 3137.93 [#/sec] redis 3122.37 [#/sec] mongo 2258.21 [#/sec]
The comparison shows that redis has superior performance in the case of more concurrency.
The session used pages are very simple pages;
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 store config:
app.use(express.session({store: new RedisStore({host: 'localhost',port: 6379,db: 2,}),secret: 'hello'}));
Mongo store config:
app.use(express.cookieParser());app.use(express.session({store: new MongoStore({url: 'mongodb://localhost/test-session'}),secret: 'hello'}));
When using mongodb storage, do not forget to load a module: connect-mongo