快递会话未在我的会话

时间:2017-07-31 21:41:59

标签: javascript node.js express express-session

我尝试使用快速会话来跟踪arcade.ly上的用户会话。我没有为genid指定值,因为我很高兴(暂时)坚持使用默认ID生成。问题是我的会话没有生成ID。

以下是我通过字符串化req.session在我的服务器实施中捕获的示例:

info: Session info: {"cookie":{"originalMaxAge":31535989265,"expires":"2018-07-31T21:30:05.827Z","secure":false,"httpOnly":true,"path":"/","sameSite":"lax"}}

正如您所看到的,除了缺少身份证之外,它一切都很好。我绝对需要一个ID,因为我希望能够关联某些信息,例如用户开始游戏,结束游戏,他们的最终得分,以及该会话,并且我想关联它他们是否登录。

如果他们选择稍后登录以记录他们的分数,那么我可以将该登录与他们的会话相关联,但是迫使他们作为用户体验在前面登录。

我的代码如下所示:

let cookieExpiry = new Date();
cookieExpiry.setFullYear(cookieExpiry.getFullYear() + 1);
let sessionOptions = {
    cookie: {
        path: '/',
        httpOnly: true,
        secure: false,
        maxAge: null,
        expires: cookieExpiry,
        sameSite: 'lax',
    },
    name: 'arcadely.sid',
    resave: false,
    saveUninitialized: false,
    secret: sessionSecret.secret
};

//  In production we want to use secure cookies
if (!debugging.isDebugging()) {
    app.set('trust proxy', 1);  //  Required for secure cookie to work behind Cloudflare
    sessionOptions.cookie.secure = true;
    sessionOptions.proxy = true;
}

app.use(session(sessionOptions));
app.use(cookieParser());
app.use(bodyParser.json());
// app.use(passport.initialize());
// app.use(passport.session());

//  Dynamic content
app.get('/', homepages.serveOrRedirect);

app.get(/^\/star-castle\/?$/, (req, res) => { res.redirect(301, '/games/starcastle/'); });
app.get(/^\/games\/asteroids\/?$/, games.loadAsteroids);
app.get(/^\/games\/space-invaders\/?$/, games.loadSpaceInvaders);
app.get(/^\/games\/starcastle\/?$/, games.loadStarCastle);

请记住,我在我的网站的调试版本中查看此内容,为什么我在会话对象中看不到任何会话ID?如果它没有存储在那里它存储在哪里,我该如何获得它?

(护照的原因是因为最终我想插入护照登录,但是现在,我已经评论过它只是为了消除它的查询,而且,sessionSecret.secret只是为方便起见,存储在另一个文件中的大型随机字符串。)

非常感谢任何帮助。

非常感谢,

巴特

1 个答案:

答案 0 :(得分:0)

事实证明问题是我是个白痴。重新阅读https://github.com/expressjs/session处的文档,向我显示req.session.id实际上是req.sessionID的别名。如果我查询后者,那么我得到了我想要的会话ID,我们都很好。