快速会议不会一直持续到页面

我试图保存会话,但是当我做会话不存在下一个请求。

当我发送一个ajax请求到/login我用req.session.username设置会话,然后发送一个表示{success:true}的对象。 然后刷新页面,如果用户名存在于会话中,则显示用户页面,否则显示主页面。

每次刷新页面/它始终显示login,即使我发送请求到/login和设置会话。 为什么会议不保存?

 let express = require('express') let sessions = require('express-session') let bodyParser = require('body-parser') let app = express() app.use(sessions({ secret: 'connection-id', resave: true, saveUninitialized: true, cookie: { maxAge: 60000 } })) app.use(bodyParser.json()) app.get('/', (req, res) => { if (req.session.username) { res.render('pages/home') } else { res.render('pages/index') } }).post('/login', (req, res) => { if (req.xhr) { req.session.username = req.body.username res.send({ success: true }) } else { res.sendStatus(500) } }) 

客户端:

 let response = await fetch('/login', { method: 'post', headers: { 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: new FormData((document.getElementById('login-form'))).toJson() }) let json = await response.json() if (json.success) { window.location.href = '/' } 

当我发出Ajax请求时,我得到以下头文件:

 set-cookie:connect.sid=s%3At25S_TmjwL6vVkhyJ9LuKIyy4EH1LTcy.Zu4fBpMibfjmMofxQI5K%2FmgAYHWFqQf3x8HPzcQbDH4; Path=/; Expires=Sun, 23 Jul 2017 15:29:26 GMT; HttpOnly 

曲奇饼

编辑

因此,在我的代码中注释掉所有内容并慢慢取消注释和testing这些行之后,我发现这不起作用:

 req.session.username = req.body.username // body.username Contains a string 

但是,这确实起作用:

 req.session.username = 'Billy' 

我不知道为什么这样做。 有什么build议么?

所以我想出了我的问题,它与服务器无关,但ajax fetch()请求。

我需要添加选项credentials: 'include'它像这样:

 let response = await fetch('/login', { method: 'post', credentials: 'include', headers: { 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: new FormData(document.getElementById('login-form')).toJson() })