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 相关文章推荐
jQuery获取Select选择的Text和Value(详细汇总)
Jan 25 Javascript
js 获取计算后的样式写法及注意事项
Feb 25 Javascript
JavaScript之cookie技术详解
Nov 18 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
Jan 21 Javascript
深入理解 JavaScript 中的 JSON
Apr 06 Javascript
Javascript中Promise的四种常用方法总结
Jul 14 Javascript
vue父组件向子组件动态传值的两种方法
Nov 11 Javascript
微信小程序实现手势图案锁屏功能
Jan 30 Javascript
基于Node.js实现压缩和解压缩的方法
Feb 13 Javascript
webpack源码之loader机制详解
Apr 06 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
Jul 08 Javascript
JavaScript的查询机制LHS和RHS解析
Aug 16 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小偷的核心程序
2007/04/09 PHP
解析php取整的几种方式
2013/06/25 PHP
php递归json类实例
2014/12/02 PHP
PHP 获取指定地区的天气实例代码
2017/02/08 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
Textarea根据内容自适应高度
2013/10/28 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
python开发之文件操作用法实例
2015/11/13 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
详解Python中的type和object
2018/08/15 Python
Django choices下拉列表绑定实例
2020/03/13 Python
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
DJI全球:DJI Global
2021/03/15 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
新学期开学寄语
2014/01/18 职场文书
军训 自我鉴定
2014/02/03 职场文书
银行类自荐信
2014/02/04 职场文书
竞选班委演讲稿
2014/04/28 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL