在 nodejs 中使用用户 object 登录后将重新生成的 session-id 发送回用户代理

sending the regenerated session-id back to user agent after login with user object in nodejs

我是 re-generating 用户 logs-in 之后的 session-id,生成了新的 session id,我也将 session-id 保存在 mongodb 但问题是我如何将 re-generated session-id 与用户 object 一起发送回 user-agent(浏览器)。 I have already tried:

res.cookie('sessionId',req.session);
res.json(user);

我是re-generatingsession-d这样的:

let session = req.session;
console.log("printing old session");
console.log(req.sessionID);

req.session.regenerate(function(err) {

if (err)     console.log(err);
else{
console.log("printing new session");
console.log(req.sessionID);

let prev_session = session;
//Copying Prev Session Data to current session.
for (let i in prev_session) {

req.session[i] = prev_session[i];

}
req.session.save();

}
}) 

以上代码 returns 用户 object 与 header 中的 session-id 为:

set-cookie: sessionId=j%3A%7B%22cookie%22%3A%7B%22originalMaxAge%22%3A86400000%2C%22
expires%22%3A%222018-07-10T06%3A16%3A16.703Z%22%2C%22secure%22%3Afalse%2C%22httpOnly%22%3Atrue%2C%22
path%22%3A%22%2F%22%7D%2C%22_csrfSecret%22%3A%22fYvLa6exta46VA%3D%3D%22%2C%22passport%22%3A%7B%22
user%22%3A%225b1fcebb293e95fc28cafc97%22%7D%7D; Path=

与之前的 sessionid :

set-cookie: sessionId=s%3AZ4HI3m3LzPcxRlp8HVEb4YzIGq3FuZbC.07kibg%2FguTNBTPlO5%2BTfHSkDh7GcQEzenlSqODetvb8; 
Path=/; Expires=Tue, 10 Jul 2018 06:16:29 GMT; HttpOnly


我仍然无法在 chrome 浏览器的 session cookie 中看到更新的 session-id

我的后端由快递和护照提供支持。

谁能帮我解决这个问题...我已经花了很多时间浏览这个问题,但还没有找到任何有效的解决方案。

在此致谢。

我不完全确定为什么你的代码中有 sessionIdreq.sessionIDreq.session,因为它们都是不同的东西。

使用cookie-parser:

写入cookie:

res.cookie('myCookieName',myValue)

读取cookie:

req.cookies.myCookieName

如果您重新生成的新会话 ID 在 req.sessionID 中,则在设置 cookie 时使用它而不是 req.session

我有一个基本示例可以指导您的实施:

const express = require('express'),
    cookieParser = require('cookie-parser');

const app = express();

var i =0;
app.use(cookieParser());

app.get('/', (req, res) =>{ 

    console.log("Previous cookie: ",req.cookies.sessionId);
    res.cookie('sessionId',{i:++i, maxAge: 900000, httpOnly: true });
    res.send('Hello World!')});

app.listen(3000, () => console.log('Example app listening on port 3000!'));

这将打印请求中发送的 cookie,然后发回一个新的。在每个请求中,您将在节点控制台上看到打印的不同数字。