首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >redis如何持久化Nodejs会话?

redis如何持久化Nodejs会话?
EN

Stack Overflow用户
提问于 2020-05-31 15:27:22
回答 1查看 1.7K关注 0票数 1

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

代码语言:javascript
复制
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来处理用户会话:

代码语言:javascript
复制
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一起发送回来时,Nodejs必须在redis存储中找到会话ID,并确保信息是正确的。

为什么刷新Nodejs服务器没有清除数据库中的所有会话ID?为什么每次刷新服务器时都不用重新登录?

EN

回答 1

Stack Overflow用户

发布于 2020-05-31 15:39:04

默认情况下,redis不会在每次写入时将数据持久化到磁盘(通常只保存数据,而不保存rdf)。因此,如果您重新启动redis,您的数据就会消失,cookie中的sessionId就不再存在了。

您将需要在您的在redis中启用持久性中对其进行雷德奥戈实例或配置。

如果要刷新所有会话信息,可以在redis实例上使用氟哈勒。最好是设置ttl (生存时间),这样你的会话最终会在30天左右的时间里被红宝石自动冲红。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62118429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档