详解nodejs express下使用redis管理session

发布时间 - 2026-01-11 00:48:49    点击率:

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  # redis  # session  # express  # express中使用redis  # 使用Nodejs 实现一个简单的 Redis客户端(推荐)  # 使用NodeJS 5分钟 连接 Redis 读写操作的详细过程  # 提升node.js中使用redis的性能遇到的问题及解决方法  # node.js使用redis储存session的方法  # nodejs使用redis作为缓存介质实现的封装缓存类示例  # Node.js与Sails redis组件的使用教程  # 在Node.js应用中使用Redis的方法简介  # node中如何使用redis的实现  # 的是  # 多个  # 值为  # 大家多多  # 身份验证  # 客户端  # 请求者  # sid  # maxAge  # host  # sessionStore  # secret  # connect  # config  # cookie  # ttl  # db  # true  # logErrors 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  如何快速搭建虚拟主机网站?新手必看指南  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel安装步骤详细教程_Laravel环境搭建指南  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Laravel PHP版本要求一览_Laravel各版本环境要求对照  如何快速搭建高效WAP手机网站吸引移动用户?  简单实现Android文件上传  Laravel如何实现API版本控制_Laravel版本化API设计方案  C#如何调用原生C++ COM对象详解  网站制作企业,网站的banner和导航栏是指什么?  无锡营销型网站制作公司,无锡网选车牌流程?  JavaScript Ajax实现异步通信  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  香港服务器如何优化才能显著提升网站加载速度?  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  微信h5制作网站有哪些,免费微信H5页面制作工具?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Laravel如何使用Telescope进行调试?(安装和使用教程)  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  百度浏览器如何管理插件 百度浏览器插件管理方法  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Java解压缩zip - 解压缩多个文件或文件夹实例  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  利用JavaScript实现拖拽改变元素大小  Bootstrap整体框架之CSS12栅格系统  如何快速查询网站的真实建站时间?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  JavaScript中的标签模板是什么_它如何扩展字符串功能  如何在 Pandas 中基于一列条件计算另一列的分组均值  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  三星、SK海力士获美批准:可向中国出口芯片制造设备  微信推文制作网站有哪些,怎么做微信推文,急?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Laravel如何处理表单验证?(Requests代码示例)  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Laravel如何使用模型观察者?(Observer代码示例)  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  制作公司内部网站有哪些,内网如何建网站?  高防服务器租用如何选择配置与防御等级?