这是我的代码:
const express = require('express')
const session = require('express-session')
const compression = require('compression')
const sessionOptions = {
secret: '123',
name: 'test',
resave: true,
saveUninitialized: false,
rolling: true,
cookie: {
httpOnly: true,
maxAge: 1000 * 1800, // 30min
secure: true
}
}
const app = express()
app.use(session(sessionOptions))
app.use(compression())
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.get('/', (req, res) => {
console.log(req.session)
res.json({
id: req.sessionID,
data: req.session.data
})
})
app.get('/login', (req, res) => {
req.session.data = 'asdasdasdasd'
res.end(req.sessionID)
})
app.listen(3000, () => {
console.log(`Server running at http://127.0.0.1:3000`)
})
然后我访问了
/
并不断刷新页面,但每次'sessionID'都不一样。/login
,然后访问/
时,结果是:
{
"id": "8Z9bb5B6lATMe1sAIT_8QgY07YvOlr8P"
}
服务器的输出是:
Session {
cookie: {
path: '/',
_expires: 2023-12-28T06:35:36.057Z,
originalMaxAge: 1800000,
httpOnly: true,
secure: true
}
}
我检查了浏览器控制台的网络面板,发现
Set-Cookie
字段从未出现在响应标头中,即使我在服务器端修改了req.session
。
我只是想实现利用session记录用户登录状态的功能。
我是不是哪里写错了?虚心求教,不胜感激!
我检查了服务器控制台输出、浏览器开发工具请求消息,并使用Wireshark爬取HTTP请求消息。希望有人能告诉我
express-session
的正确用法
这是一个很有趣的问题,让我开怀大笑。在
express-session
中间件的配置中,我将sessionOptions.cookie.secure
的值设置为true
,这意味着只有当我必须使用HTTPS时。