请求cookie不按预期方式返回快速会话数据

我正在尝试构build一个基本的loginfunction,并testing它是否会创build一个稍后可以使用的会话。 我正在使用express-session和redis来保存会话数据。 这是我的设置:

app.use(bodyParser.json()) app.use(bodyParser.urlencoded({extended: true})) app.use(express.static(path.join(__dirname, 'client/build'))) app.use(cookieParser(process.env.COOKIE_SECRET)) app.use(session({ store: new redisStore({ host: '127.0.0.1', port: 6379 }), secret: process.env.SESSION_SECRET, cookie: {maxAge: 1800}, name: 'appName', resave: false, saveUninitialized: false })) app.use('/', routes) 

然后我的login路线:

 router.post('/api/login', (req, res) => { req.session.userId = req.body.id req.session.email = req.body.email //do I need to send out a cookie with the session created here? res.set({'Set-Cookie': 'appSession=' + req.session.id}) res.status(200).send({ "message": `User ${req.body.id} logged in with cookie ${req.session.id}` }) }) 

那么这是我的理解,我应该能够读取和添加到本次会议的任何请求,我发回的cookie。 这是我的API来testing:

 router.post('/api/test' (req, res) => { if(req.session && req.session.userId) { res.status(200).send({"message": `User ID ${req.session.userId} is authenticated`}) } else { res.status(401).send({"message": `User ID ${req.session.id} is not authenticated`}) } }) 

我正在使用在api/loginpath中创build的sessionID使用带有Cookie: appName=${sessionID}邮递员发送请求到此API Cookie: appName=${sessionID} 。 这总是创build一个新的sessionId并返回401。

我的理解是正确的吗? 如果是这样,我该如何创build这个预期的行为?

现在我已经得到了一个答案 – 有一些我从互联网上的其他来源没有想到的。

首先,如果在express-session遇到问题,那么debugging问题很有用,方法是使用DEBUG=express-session node server.js运行服务器

当我这样做时,我意识到express-session没有find创build的会话。 这是因为我在几秒钟内设置了maxAge属性,而不是毫秒,因此它立即过期。 白痴。

还有一个问题。 尝试检索会话时,我得到了以下debugging输出:

  express-session cookie unsigned +1ms express-session no SID sent, generating session +1ms 

这是cookieparsing器找不到我的SessionId,因为cookieparsing器需要使用与express-session相同的密钥。 再次,回想起来很明显。

希望这可以帮助那些得到相同错误的人。