Node.js重新刷新session過(guò)期時(shí)間的方法
在Node.js中,我們通常使用express-session這個(gè)包來(lái)使用和管理session,保存服務(wù)端和客戶(hù)端瀏覽器之間的會(huì)話(huà)狀態(tài)。那如何才能實(shí)現(xiàn)當(dāng)用戶(hù)刷新當(dāng)前頁(yè)面或者點(diǎn)擊頁(yè)面上的按鈕時(shí)重新刷新session的過(guò)期時(shí)間呢?類(lèi)似于ASP.NET中session會(huì)話(huà)狀態(tài),只要在一定的時(shí)間內(nèi)頁(yè)面一直保持活動(dòng)狀態(tài),session就不會(huì)過(guò)期。通過(guò)下面的代碼可以實(shí)現(xiàn)這個(gè)功能,我們?cè)贜ode.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(); });
這樣,每次當(dāng)有請(qǐng)求過(guò)來(lái)時(shí),該中間件都會(huì)重新修改session的過(guò)期時(shí)間,從而達(dá)到預(yù)期的效果。
然后,在代碼中加入對(duì)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的存儲(chǔ)方式,有關(guān)如何使用memcached可以參考Github上的這個(gè)地址https://github.com/balor/connect-memcached
當(dāng)然,你也可以使用其它的session存儲(chǔ)方式,例如memoryStore,redis,mongoDB等等,使用方法都大同小異。
下面給大家說(shuō)說(shuō)Node.js session 存儲(chǔ)的幾種方法
node.js session store 有可選的四種方法的性能測(cè)試如下:
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]
對(duì)比得出redis來(lái)存儲(chǔ)在并發(fā)性越多的情況下性能優(yōu)越。
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存儲(chǔ)時(shí)別忘記在加載一個(gè)模塊:connect-mongo
相關(guān)文章
Node.js中的async?和?await?關(guān)鍵字微任務(wù)和宏任務(wù)
這篇文章主要介紹了Node.js中的async和await關(guān)鍵字微任務(wù)和宏任務(wù),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07Node實(shí)現(xiàn)搜索框進(jìn)行模糊查詢(xún)
這篇文章主要為大家詳細(xì)介紹了Node實(shí)現(xiàn)搜索框進(jìn)行模糊查詢(xún),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06編譯打包nodejs服務(wù)代碼如何部署到服務(wù)器
這篇文章主要介紹了編譯打包nodejs服務(wù)代碼如何部署到服務(wù)器問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10nodeJS中關(guān)于path.resolve()的用法解析
這篇文章主要介紹了nodeJS中關(guān)于path.resolve()的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06window系統(tǒng)管理多版本node的實(shí)現(xiàn)
存在不同項(xiàng)目使用npm時(shí)所需要的版本不一致,又不想每次都卸載又重新安裝node,這時(shí)候就需要多版本管理器,本文主要介紹了window系統(tǒng)管理多版本node的實(shí)現(xiàn),感興趣的可以了解一下2024-02-02nodejs實(shí)現(xiàn)的一個(gè)簡(jiǎn)單聊天室功能分享
這篇文章主要介紹了nodejs實(shí)現(xiàn)的一個(gè)簡(jiǎn)單聊天室功能分享,本文使用了express和socket.io兩個(gè)庫(kù)結(jié)合實(shí)現(xiàn),需要的朋友可以參考下2014-12-12