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 相关文章推荐
取选中的radio的值
Jan 11 Javascript
js里怎么取select标签里的值并修改
Dec 10 Javascript
json属性名为什么要双引号(个人猜测)
Jul 31 Javascript
JavaScript之数组(Array)详解
Apr 01 Javascript
js如何实现点击标签文字,文字在文本框出现
Aug 05 Javascript
js实现Select头像选择实时预览代码
Aug 17 Javascript
基于replaceChild制作简单的吞噬特效
Sep 21 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
Dec 20 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
Jun 29 Javascript
微信小程序实现图片上传、删除和预览功能的方法
Dec 18 Javascript
Angularjs实现多图片上传预览功能
Jul 18 Javascript
浅谈React Native 传参的几种方式(小结)
May 21 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设计模式 Visitor 访问者模式
2011/06/28 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
php编程每天必学之表单验证
2016/03/01 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
JS解密入门之凭直觉解
2008/06/25 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
angular4自定义组件详解
2017/09/28 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
python实现吃苹果小游戏
2020/03/21 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
纬创Java面试题笔试题
2014/10/02 面试题
农业开发项目建议书
2014/05/16 职场文书
党支部活动策划方案
2014/08/18 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
师德师风事迹材料
2014/12/20 职场文书
财务工作个人总结
2015/02/27 职场文书
小学六年级毕业感言
2015/07/30 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android