Redis 存储 + Express 会话

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

我注意到有些项目会使用redis store和express session来保存用户会话

例如:

const session = require('express-session');
var redis = require("redis");
var redisStore = require('connect-redis')(session);
var client  = redis.createClient();
var app = express();
app.use(session({
    secret: 'scret',
    store: new redisStore({
        host: '127.0.0.1', 
        port: 6379, 
        client: client,
        ttl : 7200
    }),
    saveUninitialized: true,
    // rolling: false,
    resave: true,
    cookie: {
        maxAge: 2 * 60 * 60 * 1000
    } 
}));

为什么我们需要同时使用这两个会话管理功能?

node.js session redis express-session
2个回答
1
投票

express-session
可以设置不同的“存储”来保存会话数据。

MemoryStore 随包装一起提供

express-session

express-session
的作者警告此默认商店。

警告默认的服务器端会话存储 MemoryStore 是 故意不为生产环境设计。会漏的 在大多数情况下,内存不会超出单个进程, 用于调试和开发。

Redis 是兼容的会话存储之一,在这种情况下被用作默认存储的“替代品”。


0
投票

我正在尝试做到这一点,但我的项目正在使用 ES6 并且我遇到了问题。这是我的声明和开始方式:

import session from 'express-session';
import connectRedis from 'connect-redis';
import { createClient } from 'redis';

const app = express();

async function startServer() {
    const redisURL = 'redis://localhost:6379';
    const redisClient = createClient();
    const RedisStore = connectRedis(session);
    await redisClient.connect({ url: redisURL });
    const store = new RedisStore({ redisClient });

    app.use(session({
        store: store ,
        secret: process.env.SESSION_SECRET
        resave: false,
        saveUninitialized: false,    
        cookie: { 
            httpOnly: true, 
            path: '/', 
            sameSite: 'strict',
            expires: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000) 
        }
    }));
}

我收到错误:D:\AI Projects\Hplayer - Copy\server\server.js:33 RedisStore = (0, _connectRedis["默认"])(_expressSession["默认"]); ^

TypeError:如果没有“new”,则无法调用类构造函数 RedisStore

有什么想法吗?

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