2017-07-31 78 views
0

我正在尝试使用快速会话跟踪arcade.ly上的用户会话。我没有指定genid的值,因为我很高兴(现在)坚持使用默认ID生成。问题是没有为我的会话生成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只是一个大的随机字符串存储在另一个文件为方便。)

任何帮助非常感谢。

非常感谢,

巴特

+0

这听起来像你可能需要'uuid'。试着在npmjs.org上查找'uuidv4'。 YOu可能需要包装并执行'sessionID = uuidv4()'并根据需要进行使用。我不确定这是否是您需要的。 – agm1984

+0

谢谢 - 我必须承认,我很想尝试提供自定义'genid'实现,使用'uuid'或类似的东西,只是为了检查是否实际上是问题或没有。根据文档,理论上它不应该是这样,但是文档总是有点过时,对吧?早上的一个,methinks。 –

回答

0

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