详解nodejs express下使用redis管理session


Posted in NodeJs onApril 24, 2017

Session实现原理

实现请求身份验证的方式很多,其中一种广泛接受的方式是使用服务器端产生的Session ID结合浏览器的Cookie实现对Session的管理,一般来说包括以下4个步骤:

1.服务器端的产生Session ID

2.服务器端和客户端存储Session ID

3.从HTTP Header中提取Session ID

4.根据Session ID从服务器端的Hash中获取请求者身份信息 

使用Express和Redis对Session管理的实现

var session = require('express-session');
var RedisStrore = require('connect-redis')(session);
var config={
"cookie" : {
  "maxAge" : 1800000
},
 "sessionStore" : {
  "host" : "192.168.0.13",
  "port" : "6379",
  "pass" : "123456",
  "db" : 1,
  "ttl" : 1800,
  "logErrors" : true
}

app.use(session({
  name : "sid",
  secret : 'Asecret123-',
  resave : true,
  rolling:true,
  saveUninitialized : false,
  cookie : config.cookie,
  store : new RedisStrore(config.sessionStore)
}));

实现堆栈
express-session实例化后调用代码(https://github.com/expressjs/session)

if (!req.sessionID) {

  debug('no SID sent, generating session');

  generate();

  next();

  return;

 }

generate方法调用(https://github.com/expressjs/session)

store.generate = function(req){

  req.sessionID = generateId(req);

  req.session = new Session(req);

  req.session.cookie = new Cookie(cookieOptions);

 

  if (cookieOptions.secure === 'auto') {

   req.session.cookie.secure = issecure(req, trustProxy);

  }

 };

RedisStrore实例化时调用store.set(sid, session, callback)(https://github.com/expressjs/session)

store.set调用RedisStore.prototype.set(https://github.com/tj/connect-redis),其中座位hashkey使用的是前缀+sessonId,前缀默认值为'sess',多个应用共享和不共享同一个redis session服务时,一定要注意设置prefix

RedisStore.prototype.set = function (sid, sess, fn) {

  var store = this;

  var args = [store.prefix + sid];

  if (!fn) fn = noop;

 

  try {

   var jsess = store.serializer.stringify(sess);

  }

  catch (er) {

   return fn(er);

  }

 

  args.push(jsess);

 

  if (!store.disableTTL) {

   var ttl = getTTL(store, sess);

   args.push('EX', ttl);

   debug('SET "%s" %s ttl:%s', sid, jsess, ttl);

  } else {

   debug('SET "%s" %s', sid, jsess);

  }

 

  store.client.set(args, function (er) {

   if (er) return fn(er);

   debug('SET complete');

   fn.apply(null, arguments);

  });

 };

store.client.set调用的为(https://github.com/NodeRedis/node_redis)

最终调用原生redis.hset方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs win7下安装方法
May 24 NodeJs
nodejs中使用多线程编程的方法实例
Mar 24 NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 NodeJs
在windows上用nodejs搭建静态文件服务器的简单方法
Aug 11 NodeJs
深入nodejs中流(stream)的理解
Mar 27 NodeJs
详解nodejs操作mongodb数据库封装DB类
Apr 10 NodeJs
nodejs批量下载图片的实现方法
May 19 NodeJs
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
May 15 NodeJs
图解NodeJS实现登录注册功能
Sep 16 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
nodejs各种姿势断点调试的方法
Jun 18 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 NodeJs
nodejs入门教程六:express模块用法示例
Apr 24 #NodeJs
Nodejs进阶:express+session实现简易登录身份认证
Apr 24 #NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 #NodeJs
nodejs入门教程四:URL相关模块用法分析
Apr 24 #NodeJs
nodejs入门教程三:调用内部和外部方法示例
Apr 24 #NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 #NodeJs
nodejs入门教程一:概念与用法简介
Apr 24 #NodeJs
You might like
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
javascript中关于执行环境的杂谈
2011/08/14 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
js省市区级联查询(插件版&无插件版)
2017/03/21 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
微信小程序之多文件下载的简单封装示例
2018/01/29 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
使用TFRecord存取多个数据案例
2020/02/17 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
Python eval函数介绍及用法
2020/11/09 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
医学专业毕业生推荐信
2013/11/14 职场文书
医药营销个人求职信范文
2014/02/07 职场文书
租赁意向书范本
2014/04/01 职场文书
慈善捐赠倡议书
2014/08/30 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
工程技术员岗位职责
2015/04/11 职场文书
门球健将观后感
2015/06/16 职场文书
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技