详解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 url验证(url-valid)的使用方法
Nov 18 NodeJs
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
nodejs通过phantomjs实现下载网页
May 04 NodeJs
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
Jul 26 NodeJs
nodejs redis 发布订阅机制封装实现方法及实例代码
Dec 15 NodeJs
nodejs搭建本地服务器并访问文件的方法
Mar 03 NodeJs
nodejs+express实现文件上传下载管理网站
Mar 15 NodeJs
详解nodejs微信jssdk后端接口
May 25 NodeJs
nodejs连接mysql数据库及基本知识点详解
Mar 20 NodeJs
nodejs读取本地中文json文件出现乱码解决方法
Oct 10 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
如何利用nodejs实现命令行游戏
Nov 24 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中动态显示签名和ip原理
2007/03/28 PHP
一些使用频率比较高的php函数
2008/10/03 PHP
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
js实现select跳转功能代码
2014/10/22 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
tensorflow实现KNN识别MNIST
2018/03/12 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
对Python 语音识别框架详解
2018/12/24 Python
python实现实时视频流播放代码实例
2020/01/11 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
NFL墨西哥官方商店:Tienda NFL
2017/11/28 全球购物
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
办公室内勤岗位职责范本
2013/12/09 职场文书
市场拓展计划书
2014/05/03 职场文书
2015年党性分析材料
2014/12/19 职场文书
总经理岗位职责范本
2015/04/01 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
终止合同协议书范本
2016/03/22 职场文书