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代码
Dec 03 Javascript
js导出table到excel同时兼容FF和IE示例
Sep 03 Javascript
JS+CSS实现下拉列表框美化效果(3款)
Aug 15 Javascript
js捕捉键盘事件和按键键值的方法
Oct 10 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 Javascript
打造通用的匀速运动框架(实例讲解)
Oct 17 Javascript
vue-cli项目中使用echarts图表实例
Oct 22 Javascript
微信小程序中转义字符的处理方法
Mar 28 Javascript
在微信小程序中使用图表的方法示例
Apr 25 Javascript
Vue.js组件实现选项卡以及切换特效
Jul 24 Javascript
vue实现多组关键词对应高亮显示功能
Jul 25 Javascript
vue props 单项数据流实例分享
Feb 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
关于手调机和数调机的选择
2021/03/02 无线电
PHP数据过滤的方法
2013/10/30 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
模仿jQuery each函数的链式调用
2009/07/22 Javascript
toString()一个会自动调用的方法
2010/02/08 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
python实现simhash算法实例
2014/04/25 Python
Python greenlet实现原理和使用示例
2014/09/24 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
Python如何读取、写入CSV数据
2020/07/28 Python
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
自动化专业职业生涯规划书范文
2014/01/16 职场文书
优秀干部获奖感言
2014/01/31 职场文书
周年庆典主持词
2014/04/02 职场文书
大连导游词
2015/02/12 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers
如何使用SQL Server语句创建表
2022/04/12 SQL Server