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


Posted in Javascript onFebruary 04, 2016

在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

Javascript 相关文章推荐
Javascript 变量作用域 两个可能会被忽略的小特性
Mar 23 Javascript
JS控制输入框内字符串长度
May 21 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
Aug 10 Javascript
举例说明如何为JavaScript的方法参数设置默认值
Nov 17 Javascript
讲解vue-router之什么是动态路由
May 28 Javascript
JavaScript类型相关的常用操作总结
Feb 14 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
Apr 29 Javascript
bootstrap Table实现合并相同行
Jul 19 Javascript
layui表单验证select下拉框实现验证的方法
Sep 05 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
Mar 10 Javascript
JS中准确判断变量类型的方法
Jun 01 Javascript
vue全局使用axios的操作
Sep 08 Javascript
jquery操作select元素和option的实例代码
Feb 03 #Javascript
Javascript获取统一管理的提示语(message)
Feb 03 #Javascript
javascript显示上周、上个月日期的处理方法
Feb 03 #Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
Feb 03 #Javascript
AngularJS向后端ASP.NET API控制器上传文件
Feb 03 #Javascript
javascript DIV实现跟随鼠标移动
Mar 19 #Javascript
javascript鼠标右键菜单自定义效果
Dec 08 #Javascript
You might like
PHP mysql事务问题实例分析
2016/01/18 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
2016/12/30 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
Python如何生成树形图案
2018/01/03 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
迪拜航空官方网站:flydubai
2017/04/20 全球购物
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
应届生煤化工求职信
2013/10/21 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
党的作风建设心得体会
2014/10/22 职场文书
加强作风建设演讲稿
2014/10/24 职场文书
2014年环卫工作总结
2014/11/22 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
Python Parser的用法
2021/05/12 Python
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android
MongoDB支持的数据类型
2022/04/11 MongoDB