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 相关文章推荐
js 单引号 传递方法
Jun 22 Javascript
js中判断控件是否存在
Aug 25 Javascript
获取body标签的两种方法
Oct 13 Javascript
JS实现页面超时后自动跳转到登陆页面
Jan 19 Javascript
Jquery中CSS选择器用法分析
Feb 10 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
Feb 26 Javascript
jQuery内容过滤选择器用法示例
Sep 09 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
Nov 30 Javascript
AngularJS改变元素显示状态
Apr 20 Javascript
教你5分钟学会用requirejs(必看篇)
Jul 25 Javascript
JavaScript变速动画函数封装添加任意多个属性
Apr 03 Javascript
uniapp,微信小程序中使用 MQTT的问题
Jul 11 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
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
浅析JavaScript中的delete运算符
2013/11/30 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
基于Python的文件类型和字符串详解
2017/12/21 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
应届生煤化工求职信
2013/10/21 职场文书
经理职责范文
2013/11/08 职场文书
初一科学教学反思
2014/01/27 职场文书
大学新生入学感想
2015/08/07 职场文书
筑梦中国心得体会
2016/01/18 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python
利用Python+OpenCV三步去除水印
2021/05/28 Python
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python