nodejs express下使用redis管理session

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方法

 
时间: 2024-10-22 05:47:28

nodejs express下使用redis管理session的相关文章

TWaver html5 + NodeJS + express + websocket.io + redis 快速搭建项目(一)

最近看到TWaver 的html5版本即将发布了,于是今天用TWaver HTML5 + NodeJS + express + websocket.io + redis搭建了一个简单原型.先发出几张效果图给大家尝尝鲜.界面添加.修改以及删除网元后,会自动增量存库,并广播更新. 看看这个广播实现的效果,可以在手机上接受任何操作: 最后再来个告警广播的效果图 在后续的文章中会给大家详细的讲解具体技术的实现.

Web应用优化之nginx+tomcat集群配置+redis管理session

1.nginx的安装 从官网下载一个nginx事务tar.gz版本,centos系统,安装好jdk 第一步解压 第二步:解压完成进入解压目录,执行./configure命令 需要安装gcc编译和pcre库,zlib库 yum -y install gcc yum install pcre-devel yum install zlib-devel ./configure完成后执行make install即可安装成功 2.集群配置流程 一.克隆2台CentOS虚拟机,并安装jdk+tomcat 二.

集群下使用redis统一session处理

pom依赖(快照版): <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>

用Redis管理Session

maven <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.1</version> </dependency> <dependency> <groupId>org.springframework.session</groupId> <art

Nginx+Tomcat负载平衡,Redis管理session存储

使用Nginx作为Tomcat的负载平衡器,Tomcat的会话Session数据存储在Redis,能够实现0当机的7x24运营效果.因为将会话存储在Redis中,因此Nginx就不必配置成stick粘粘某个Tomcat方式,这样才能真正实现后台多个Tomcat负载平衡,用户请求能够发往任何一个tomcat主机,当我们需要部署新应用代码时,只要停止任何一台tomcat,所有当前在线用户都会导向到运行中的tomcat实例,因为会话数据被序列化到Redis,在线用户不会受到影响,一旦停掉的tomcat

NodeJS+Express下构建后端MVC文件结构

关于MVC的结构大体上有两种方式,其一按照层级进行文件夹分类,其二是按照业务进行文件夹分类.关于这个demo相关的业务简单,所以暂采用第一种的方式,当然实际当中很恨复杂的项目可以采用两种方式相结合的方式来进行! 不多说费,然后我们具体结构,直接上图: github地址:https://github.com/FicoHu/nodeserver nodesv:根目录,作为整个web项目的跟文件夹. app: 作为整个后端服务的文件夹,我们这次说的重点就是这个文件夹下的结构. public作为整个项目

Nodejs Express下引入本地文件的方法

Express的结构如下: |---node_modules------用于安装本地模块. |---public------------用于存放用户可以下载到的文件,比如图片.脚本文件.样式表等.     |---routes------------用于存放路由文件.     |---views-------------用于存放网页的模板.     |---app.js------------应用程序的启动脚本.     |---package.json------项目的配置文件. 从上述结构中

ASP.NET下跨应用共享Session和使用Redis进行Session托管简介

在之前的博客中,我说到了Session的共享问题,其中说到了Web Farm和Web Garden两种情况下Session的处理.在ASP.NET提供的Session处理方法中,有以下四种模式: 1.  InProc模式 这是ASP.NET默认的Session管理模式,在应用进程内维护Session. 2.  StateServer模式 这是在服务器装了.NET环境后自带的一个StateServer服务,在应用进程外管理Session,可以进行多应用间的Session共享,在我看来这一模式最为适

nodejs express session用法(含保存到redis)

普通用法: 1 var express = require('express'); 2 var session = require('express-session'); 3 4 var app = express(); 5 6 app.use(session({ 7 name: 'test1', // 非常重要,用于区分两个系统的session 8 secret: 'test1 cat', 9 cookie: { maxAge: 5 * 60 * 60 * 1000 }, 10 resave: