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

相关文章

  • Node.js测试中的Mock文件系统详解

    Node.js测试中的Mock文件系统详解

    相信大家应该都知道在Node.js测试中,常常会需要构造某种项目目录。 为每个测试用例添加相应的目录结构既费时又难以维护。那么这个时候Mock文件系统就派上用场了,下面这篇文章详细的介绍了Mock文件系统,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11
  • Node异步和事件循环的深入讲解

    Node异步和事件循环的深入讲解

    异步对于前端来说是老生常谈的话题,同样学习node也离不开异步IO与事件循环,下面这篇文章主要给大家介绍了关于Node异步和事件循环的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 在Linux系统中搭建Node.js开发环境的简单步骤讲解

    在Linux系统中搭建Node.js开发环境的简单步骤讲解

    这篇文章主要介绍了在Linux系统中搭建Node.js开发环境的步骤,Node使得JavaScript程序可以在本地操作系统环境中解释运行,需要的朋友可以参考下
    2016-01-01
  • node 解析图片二维码的内容代码实例

    node 解析图片二维码的内容代码实例

    这篇文章主要介绍了node 解析图片二维码的内容代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • node.js中的console.warn方法使用说明

    node.js中的console.warn方法使用说明

    这篇文章主要介绍了node.js中的console.warn方法使用说明,本文介绍了console.warn的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • Node.js websocket使用socket.io库实现实时聊天室

    Node.js websocket使用socket.io库实现实时聊天室

    这篇文章主要为大家详细介绍了Node.js websocket使用socket.io库实现实时聊天室,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • node将对象转化为query的实现方法

    node将对象转化为query的实现方法

    本文主要介绍了node将对象转化为query的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Express + Session 实现登录验证功能

    Express + Session 实现登录验证功能

    本文主要介绍在 Express 框架中,如何使用 Session 来实现用户登录身份验证。对express session实现登录验证相关知识,感兴趣的朋友一起看看吧
    2017-09-09
  • NodeJS之优缺点及适用场景讨论

    NodeJS之优缺点及适用场景讨论

    这篇文章主要介绍了NodeJS之优缺点及适用场景讨论,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • node.js中的buffer.Buffer.byteLength方法使用说明

    node.js中的buffer.Buffer.byteLength方法使用说明

    这篇文章主要介绍了node.js中的buffer.Buffer.byteLength方法使用说明,本文介绍了buffer.Buffer.byteLength的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12

最新评论