【发布时间】:2020-11-14 01:30:20
【问题描述】:
我用 NodeJS (+ express) 实现了一个 Redis 会话存储。这是会话的代码:
app.use(cookieParser());
const redisClient = redis.createClient(config.redis);
app.use(session({
secret: 'SomeSecretKey',
key: 'session_id',
resave: false,
saveUninitialized: false,
cookie: {maxAge: 24 * 60 * 60 * 1000, secure: false},
store: new redisStore({
host: config.redis.host,
port: config.redis.port,
client: redisClient,
ttl: 86400
}
),
}));
我的路由 /api/session 在 NodeJS 中如下所示:(我正在操作会话对象并向其附加一些值)
app.get('/api/session', (req, res) => {
console.log(req.sessionID);
req.session.test = 42;
res.end('1');
});
当我通过浏览器访问localhost:3000/api/session 时,我的redis-cli monitor 上会显示以下内容:
正如您在屏幕截图中看到的 - 会话 ID 保持不变。
但是当我通过 Angular HTTP 模块执行 GET 请求时:
然后我的redis-cli monitor 显示以下内容(它为每个请求生成一个新的 sessionID,我无法在会话中存储任何数据):
总结如下:来自浏览器的 GET 请求确实存储了我的会话,但来自 Angular HTTP 模块的 GET 请求不存储我的会话。进一步使用 Angular GET 请求,它不会将 session_id 存储在我的应用程序 cookie 中(当我在 Chrome 中按 F12 时)。
编辑:
当我执行 curl localhost:3000/api/session 时,它的作用与 Angular HTTP 模块相同:每个请求的新会话。我想要一个具有相同 sessionID 的持久会话。
我做错了什么?
提前致谢
【问题讨论】:
标签: node.js angular session redis