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 子窗口操作父窗口的代码
Sep 21 Javascript
js 与或运算符 || && 妙用
Dec 09 Javascript
浅谈Javascript 执行顺序
Dec 18 Javascript
一个css与js结合的下拉菜单支持主流浏览器
Oct 08 Javascript
基于Jquery和html5的7款个性化地图插件
Nov 17 Javascript
JavaScript性能优化总结之加载与执行
Aug 11 Javascript
JS对象是否拥有某属性如何判断
Feb 03 Javascript
jQuery插件form-validation-engine正则表达式操作示例
Feb 09 Javascript
layui导航栏实现代码
May 19 Javascript
vue-router路由懒加载和权限控制详解
Dec 13 Javascript
vue-router中scrollBehavior的巧妙用法
Jul 09 Javascript
jQuery实现全选按钮
Jan 01 jQuery
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实现对二维数组某个键排序的方法
2016/09/14 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
JQury slideToggle闪烁问题及解决办法
2011/07/05 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
bootstrap布局中input输入框右侧图标点击功能
2016/05/16 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
python中使用print输出中文的方法
2018/07/16 Python
python列表使用实现名字管理系统
2019/01/30 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
python 怎样进行内存管理
2020/11/10 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
财务会计专业个人求职信范本
2014/01/08 职场文书
百度吧主申请感言
2014/01/12 职场文书
教学质量评估实施方案
2014/03/17 职场文书
预备党员承诺书
2014/03/25 职场文书
广告宣传策划方案
2014/05/21 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
杨善洲电影观后感
2015/06/04 职场文书
《海上日出》教学反思
2016/02/23 职场文书
python 调用js的四种方式
2021/04/11 Python
MySQL慢查询的坑
2021/04/28 MySQL