gpt4 book ai didi

node.js - express session存储在redis中用于匿名

转载 作者:可可西里 更新时间:2023-11-01 10:59:13 26 4
gpt4 key购买 nike

我正在使用带有模块 express-sessionconnect-redispassport 的 express 4.0 来管理 session 。登录和注销一切正常,我可以检索 session 等。

但我注意到一些奇怪的事情:即使我是匿名的,如果我要 redis 并输入:

$ KEYS *

Redis 返回条目 1) "sess:VWdwTjPXkITmqQ77xI8cotlltdrz7S8s" 即使当前没有连接。当我连接时,这个 key 被另一个与我的 session 相对应的替换。当我注销时, key 又被另一个改变了。当匿名用户调用 URL 时,我的 req.sessionID 也被设置。

在本站https://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile我读过一些关于 create session even for anonymous 的内容(7. Go session-free),我认为它是相关的。

我在主 app.js 文件中添加中间位置,内容如下:

var
passport = require('passport'),
User = require('../models/user'),
LocalStrategy = require('passport-local').Strategy,
session = require('express-session'),
RedisStore = require('connect-redis')(session);

app.use(session({
store: new RedisStore(app.locals.services.session.config),
secret: 'mysecretstring'
}));

app.use(passport.initialize());
app.use(passport.session());

passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

即使我从一个新的服务器开始,如果我尝试获取我什么都不做的主页,我也会遇到问题:

index: function (req, res) {
res.render('home/index');
}

即使在这种情况下,我的 redis 中也会创建一个新 key 。

注意:如果我删除这两行,则不会创建 key 。

app.use(passport.initialize());
app.use(passport.session());

所以,我的问题是:如何避免在 Redis 中为匿名用户创建 key ? (而且,不存储匿名 session 是个好主意吗?)。

谢谢!

最佳答案

如果你不想为每个请求创建一个新 session ,设置saveUninitializedexpress-session 中间件中设置为 false:

app.use(session({
store : new RedisStore(app.locals.services.session.config),
secret : 'mysecretstring',
saveUninitialized : false,
}));

关于node.js - express session存储在redis中用于匿名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32308855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com