Home > Web Front-end > JS Tutorial > Node.js method to refresh session expiration time_node.js

Node.js method to refresh session expiration time_node.js

WBOY
Release: 2016-05-16 15:16:16
Original
1775 people have browsed it

In Node.js, we usually use the express-session package to use and manage sessions and save the session state between the server and the client browser. So how can we achieve the expiration time of the session when the user refreshes the current page or clicks a button on the page? Similar to the session state in ASP.NET, as long as the page remains active for a certain period of time, the session will not expire. This function can be achieved through the following code. We add the following middleware to the Node.js code:

// 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();
}); 
Copy after login

In this way, every time a request comes in, the middleware will re-modify the session expiration time 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_'
})
})); 
Copy after login

The above session uses memcached as the session storage method. For how to use memcached, you can refer to this address on Github https://github.com/balor/connect-memcached

Of course, you can also use other session storage methods, such as memoryStore, redis, mongoDB, etc., and the usage methods are similar.

Let me talk about several methods of Node.js session storage

Node.js session store has four optional methods for performance testing as follows:

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]
Copy after login

Comparison shows that redis storage has superior performance when there is 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);});
Copy after login

Redis store config:

app.use(express.session({
store: new RedisStore({
host: 'localhost',
port: 6379,
db: 2,
}),
secret: 'hello'}));
Copy after login

Mongo store config:

app.use(express.cookieParser());app.use(express.session({
store: new MongoStore({
url: 'mongodb://localhost/test-session'
}),
secret: 'hello'}));

Copy after login

Don’t forget to load a module when using mongodb storage: connect-mongo

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template