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基础学习资料
Nov 23 Javascript
jquery如何判断某元素是否具备指定的样式
Nov 05 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
Apr 25 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
Jul 30 Javascript
浅谈Javascript 数组与字典
Jan 29 Javascript
JavaScript实现获得所有兄弟节点的方法
Jul 23 Javascript
jquery实现先淡出再折叠收起的动画效果
Aug 07 Javascript
微信小程序 二维码canvas绘制实例详解
Jan 06 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
May 24 Javascript
JavaScript创建对象_动力节点Java学院整理
Jun 27 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
Mar 31 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
一些星际专用术语解释
2020/03/04 星际争霸
PHP字符串处理的10个简单方法
2010/06/30 PHP
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
PHP中的替代语法简介
2014/08/22 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
韩国11街:11STREET
2018/03/27 全球购物
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
Linux上比较文件的命令都有哪些
2012/02/24 面试题
西式婚礼证婚词
2014/01/12 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
中学生检讨书1000字
2014/10/28 职场文书
学习党章的体会
2014/11/07 职场文书
民主评议党员个人总结
2015/02/13 职场文书
学校捐书倡议书
2015/04/27 职场文书
企业培训简报范文
2015/07/20 职场文书
开学第一天的感想
2015/08/10 职场文书
Nginx 常用配置
2022/05/15 Servers