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插件集合推荐
Apr 19 Javascript
js querySelector和getElementById通过id获取元素的区别
Apr 20 Javascript
jquery 插件学习(三)
Aug 06 Javascript
JS小功能(button选择颜色)简单实例
Nov 29 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
Feb 27 Javascript
js实现回放拖拽轨迹从过程上进行分析
Jun 26 Javascript
7个有用的jQuery代码片段分享
May 19 Javascript
JQuery在循环中绑定事件的问题详解
Jun 02 Javascript
javascript的几种写法总结
Sep 30 Javascript
前端构建工具之gulp的语法教程
Jun 12 Javascript
浅谈发布订阅模式与观察者模式
Apr 09 Javascript
vue监听键盘事件的相关总结
Jan 29 Vue.js
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
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
Python 稀疏矩阵-sparse 存储和转换
2017/05/27 Python
Python for循环中的陷阱详解
2018/07/13 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
详解python中@的用法
2019/03/27 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
Python try except else使用详解
2021/01/12 Python
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
党课心得体会范文
2014/09/09 职场文书
企业年检委托书范本
2014/10/14 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
2019年教师入党申请书
2019/06/27 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript