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源码]超长文章自动分页(客户端版)
Jan 09 Javascript
javascript 弹出窗口中是否显示地址栏的实现代码
Apr 14 Javascript
基于JQuery 的消息提示框效果代码
Jul 31 Javascript
JavaScript学习笔记之JS事件对象
Jan 22 Javascript
js鼠标悬浮出现遮罩层的方法
Jan 28 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
Nov 17 Javascript
JS实现重新加载当前页面或者父页面的几种方法
Nov 30 Javascript
Angular2开发——组件规划篇
Mar 28 Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
Dec 31 Javascript
JS数据类型判断的几种常用方法
Jul 07 Javascript
JavaScript声明变量和数据类型的转换
Apr 12 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
安装APACHE
2007/01/15 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
基于NodeJS的前后端分离的思考与实践(二)模版探索
2014/09/26 NodeJs
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
Python获取网页上图片下载地址的方法
2015/03/11 Python
Python比较两个图片相似度的方法
2015/03/13 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
django框架模板语言使用方法详解
2019/07/18 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
安全生产汇报材料
2014/02/17 职场文书
天网工程实施方案
2014/03/26 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
办公室规章制度范本
2015/08/04 职场文书
高三生物教学反思
2016/02/22 职场文书
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
微信小程序实现聊天室功能
2021/06/14 Javascript
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL