Node. js method to refresh the session expiration time

  • 2020-12-18 01:44:06
  • OfStack

In ES1en. js, we typically use the express-ES4en package to use and manage session, saving session state between the server and the client browser. So how do you achieve the expiration time of the session refresh when the user refreshes the current page or clicks a button on the page? Similar to the session session state in ES7en.NET, session does not expire as long as page 1 remains active for a set amount of time. To achieve this function, we added the following middleware into the code of ES11en. 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();
}); 

This way, each time a request comes in, the middleware rechanges the expiration time of session to achieve the desired effect.

Then, add the use of session to 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_'
})
})); 

Above session USES the memcached as session storage, Github memcached can reference on how to use this address https: / / github com/balor/connect - memcached

Of course, you can also use other session storage methods, such as memoryStore, redis, mongoDB, etc., all in the same way.

Here are some ways to store ES44en. js session

The performance tests of node. js session store have the following four methods as optional:


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]

The comparison shows that redis has better 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'}));

Don't forget to load one module when using mongodb storage: ES73en-ES74en


Related articles: