在node.js(express)中使用Redis持久化存储session

什么是session

session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存。 session可以和redis或者数据库等结合做持久化操作,当服务器挂掉时也不会导致某些session信息丢失。

在node(express)中使用session,并且持久化保存在Redis中

安装session模块和Redis模块

在node(express)中使用session需要先安装cookie-parserexpress-session模块。 为了持久化保存session我们使用Redis,需要安装redisconnect-redis模块。

模块安装方法

npm install cookie-parser express-session redis connect-redis --save

引入配置

// express 模块
var express = require('express');
// session 模块
var cookieParser = require('cookie-parser');
var session = require('express-session');
// redis 模块
var redis   = require('redis');
var client  = redis.createClient('6379', '127.0.0.1');// 默认监听6379端口,'127.0.0.1'为你本地ip(默认不需要修改)
var RedisStore = require('connect-redis')(session);

// 执行express
var app = express();
// 运行cookieParser 方法
app.use(cookieParser());

// redis 链接错误
client.on("error", function(error) {
    console.log(error);
});


//配置 session
var identityKey = 'skey';
app.use(session({
    name: identityKey,
    secret: 'sessiontest',  // 用来对session id相关的cookie进行签名
    store: new RedisStore(),  // (使用redis的存储session)
    saveUninitialized: false,  // 是否自动保存未初始化的会话,建议false
    resave: false,  // 是否每次都重新保存会话,建议false
    cookie: {
        maxAge: 10*60 * 1000  // 有效期,单位是毫秒, 这里设置的是10分钟
    }
}));

// 检测 session是否正常
app.use(function (req, res, next) {
    if (!req.session) {
        return next(new Error('session错误'))
    }else {
        console.log(req.session)//正常打印当前session
    }
    next() // 正常 载入下一个中间件
})
复制代码

使用session

读取session

使用req.session.username (username为你储存的session的key名)即可读到当前session中的username对象

设置session

使用req.session.username='yonghuming' 即可为session的username这个key值赋值

express-session的一些其他操作方法:

Session.regenerate() 将已有session初始化。

req.session.regenerate(function(err) {
  // will have a new session here
})
复制代码

Session.destroy() 删除session,当检测到客户端关闭时调用。

req.session.destroy(function(err) {
  // cannot access session here
})
复制代码

Session.save() 保存session。

req.session.save(function(err) {
  // session saved
})
复制代码

Session.reload() 当session有修改时,刷新session。

req.session.reload(function(err) {
  // session updated
})
复制代码
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值