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 event使用方法详解
Apr 28 Javascript
js每次Title显示不同的名言
Sep 25 Javascript
Jquery 数组操作大全个人总结
Nov 13 Javascript
jquery map方法使用示例
Apr 23 Javascript
javascript实现iframe框架延时加载的方法
Oct 30 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
Nov 13 Javascript
JavaScript中的各种操作符使用总结
May 26 Javascript
实现React单页应用的方法详解
Aug 02 Javascript
JS访问DOM节点方法详解
Nov 29 Javascript
vue.js中Vue-router 2.0基础实践教程
May 08 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
Dec 09 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
Jan 19 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读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
2012/07/31 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
IE 条件注释详解总结(附实例代码)
2009/08/29 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
python获取外网ip地址的方法总结
2015/07/02 Python
Python下载指定页面上图片的方法
2016/05/12 Python
python如何将图片转换为字符图片
2020/08/19 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
Pytorch训练过程出现nan的解决方式
2020/01/02 Python
python标准库os库的函数介绍
2020/02/12 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
洲际酒店集团大中华区:IHG中国
2016/08/17 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
Linux机考试题
2015/10/16 面试题
人力资源专业推荐信
2013/11/29 职场文书
社会实践感言
2014/01/25 职场文书
欢迎词怎么写
2015/01/23 职场文书
介绍信模板
2015/01/31 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
NGINX 权限控制文件预览和下载的实现原理
2022/01/18 Servers
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA