Node.js重新刷新session过期时间的方法

 更新时间:2016年02月04日 09:00:15   作者:Jaxu  
在Node.js中,我们通常使用express-session这个包来使用和管理session,保存服务端和客户端浏览器之间的会话状态。那如何才能实现当用户刷新当前页面或者点击页面上的按钮时重新刷新session的过期时间呢,接下来通过本文一起学习吧

在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

相关文章

  • npm 下载指定版本的组件方法

    npm 下载指定版本的组件方法

    今天小编就为大家分享一篇npm 下载指定版本的组件方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Node.js中的async 和 await 关键字微任务和宏任务

    Node.js中的async 和 await 关键字微任务和宏任务

    这篇文章主要介绍了Node.js中的async和await关键字微任务和宏任务,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • 详解nvm管理多版本node踩坑

    详解nvm管理多版本node踩坑

    这篇文章主要介绍了详解nvm管理多版本node踩坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Node实现搜索框进行模糊查询

    Node实现搜索框进行模糊查询

    这篇文章主要为大家详细介绍了Node实现搜索框进行模糊查询,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • 编译打包nodejs服务代码如何部署到服务器

    编译打包nodejs服务代码如何部署到服务器

    这篇文章主要介绍了编译打包nodejs服务代码如何部署到服务器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • nodeJS中关于path.resolve()的用法解析

    nodeJS中关于path.resolve()的用法解析

    这篇文章主要介绍了nodeJS中关于path.resolve()的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Node输出日志的正确方法示例

    Node输出日志的正确方法示例

    这篇文章主要为大家介绍了Node输出日志的正确方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • window系统管理多版本node的实现

    window系统管理多版本node的实现

    存在不同项目使用npm时所需要的版本不一致,又不想每次都卸载又重新安装node,这时候就需要多版本管理器,本文主要介绍了window系统管理多版本node的实现,感兴趣的可以了解一下
    2024-02-02
  • NodeJS处理Express中异步错误

    NodeJS处理Express中异步错误

    本文主要阐述如何在 Express 中使用错误处理中间件(error-handling middleware)来高效处理异步错误。在 Github 上有对应 代码实例 可供参考。
    2017-03-03
  • nodejs实现的一个简单聊天室功能分享

    nodejs实现的一个简单聊天室功能分享

    这篇文章主要介绍了nodejs实现的一个简单聊天室功能分享,本文使用了express和socket.io两个库结合实现,需要的朋友可以参考下
    2014-12-12

最新评论