Redis如何持久化Nodejs会话?

问题描述 投票:0回答:1

我最近开始在我的Nodejs项目上使用Redis。我用它来存储我的会话。

const session = require("express-session")
const redis = require('redis')
let RedisStore = require('connect-redis')(session)

let redisClient
if(process.env.REDISTOGO_URL){
    // let redisURL = url.parse(process.env.REDISTOGO_URL);
    redisClient = redis.createClient(process.env.REDISTOGO_URL)
} else {
    redisClient = redis.createClient()
}

app.use(
        session({
            store: new RedisStore({
                client: redisClient
            }),
            secret: keys.session.secret,
            resave: false,
            saveUninitialized: false
        })
    )

我也在使用 passport.js 来处理用户会话。

passport.serializeUser(function(user, done) {
        done(null, user.id);
    });

    // used to deserialize the user
    passport.deserializeUser(function(id, done) {
        pool.query( `Select users.* where users.id = ${id} `, function(err, rows) {
            if(err){
                console.log(err)
            }
            else{
                done(err,rows[0]);    
            }
        });
    });

我在阅读Redis的工作原理时,发现了这个。

当使用内存缓存时,你的cookie只包含一个会话ID。 这消除了用户私人信息在cookie中暴露的风险。

这意味着在任何时间,Nodejs服务器仍然要存储会话ID。当浏览器将cookie与用户信息和加密的秘密一起发回时,Nodejs将不得不在redis存储中找到会话ID,并确保信息正确。

為什麼刷新Nodejs伺服器不會清除所有資料庫中的session ID?为什么每次刷新服务器都不用重新登录?

node.js redis
1个回答
0
投票

Redis 默认情况下不会在每次写入数据时将数据持久化到磁盘上(通常只有 aof 而没有 rdf)。所以如果你重启redis,你的数据可能会消失,你的cookie中的sessionId也不存在了。

你将需要 在redis中实现持久化 或在您的 重症监护室.

如果你想刷新所有的会话信息,你可以通过 FLUSHALL 在您的redis实例上。最好的办法是 设置寿命时间。 所以你的会话最终会在30天左右后被redis自动刷新。

© www.soinside.com 2019 - 2024. All rights reserved.