首頁 > web前端 > js教程 > 主體

Node.js重新刷新session過期時間的方法_node.js

WBOY
發布: 2016-05-16 15:16:16
原創
1751 人瀏覽過

在Node.js中,我們通常使用express-session這個套件來使用和管理session,保存服務端和客戶端瀏覽器之間的會話狀態。那要如何才能實現當使用者刷新目前頁面或點擊頁面上的按鈕時重新刷新session的過期時間呢?類似ASP.NET中session會話狀態,只要在一定的時間內頁面一直保持活動狀態,session就不會過期。透過下面的程式碼可以實現這個功能,我們在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();
}); 
登入後複製

  這樣,每次當有請求過來時,該中間件都會重新修改session的過期時間,從而達到預期的效果。

  然後,在程式碼中加入session的使用:

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_'
})
})); 
登入後複製

  上面的session使用了memcached作為session的儲存方式,有關如何使用memcached可以參考Github上的這個位址https://github.com/balor/connect-memcached

  當然,你也可以使用其它的session儲存方式,例如memoryStore,redis,mongoDB等等,使用方法都大同小異。

下面要跟大家說說Node.js session 儲存的幾個方法

node.js session store 有可選的四種方法的效能測試如下:

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]
登入後複製

比較得出redis來儲存在並發性越多的情況下效能優越。

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'}));

登入後複製

使用mongodb儲存時別忘記在載入一個模組:connect-mongo

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!