每次请求都会重置 Express 会话

Express session resets on every request

我在 localhost:8080 上有一个 vue 前端,在 localhost:1234 上有一个服务器 我没有使用 https。 每次 vue 应用程序切换页面或重新加载时,会话都会重置。我在网上遵循了各种解决方案,例如: and

然而无济于事。

这是我的会话配置:

// app.set('trust proxy', 1 );
app.use(session({
    secret: sessionServerToken,
    resave: true,
    saveUninitialized: true,
    cookie: {
        // Session expires after 1 hour of inactivity.
        expires: 60 * 1000 * 60,
        // sameSite: 'none',

        secure: false
    }
})); 

这是我的授权码:

router.post('/auth', (req, res) => {
    console.log(req.body);
    const session = req.session;
    AuthManager.authenticate(req.body.user, req.body.pass).then(response => {
        session.loggedIn = true;
        session.userID = response.user.id;
        res.status(200).send(response);
        res.end();
    }).catch(response => {
        res.status(response.statusCode).send({ message: response.message });
    });
});

Cookie 不会在不同来源之间共享。会话数据不会共享到前端应用程序,这就是为什么它的行为就像正在重置会话一样。

如果你构建你的 Vue 应用程序并通过 Express 提供它,你将不会遇到这个问题,会话将按预期共享。

但是对于开发来说,这会很烦人,您可以通过 Express 代理 front-end 应用程序。

作为一个最小的例子,您可以试试下面的代码。 运行 你的 Vue 应用程序像往常一样,然后 运行 服务器具有以下内容

const express = require('express');
const session = require("express-session");
const proxy = require('express-http-proxy');
const app = express();

app.use(
  session({
    secret: 'keyboard cat',
    cookie: {
      maxAge: 60000
    },
    value: 0
  })
);
app.get('/api', (req, res) => {
  req.session.value ++;
  res.json({
    session: req.session.value
  });
});
app.use(proxy('http://127.0.0.1:8080'));

app.listen(4001, '0.0.0.0', () => {
  console.log('Server is running at http://127.0.0.1:1234');
});

Vue 应用程序内容将在 http://127.0.0.1:1234 上可用,如果您导航 http://127.0.0.1:1234/api 并刷新几次,您将看到会话值存在并且不会重置。