如何在express-session中保存登录状态

问题描述 投票:0回答:1

这是我的代码:

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

的正确用法
node.js express express-session
1个回答
0
投票

这是一个很有趣的问题,让我开怀大笑。在

express-session
中间件的配置中,我将
sessionOptions.cookie.secure
的值设置为
true
,这意味着只有当我必须使用HTTPS时。

© www.soinside.com 2019 - 2024. All rights reserved.