Express 会话会根据每个请求重置

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

我在

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

然而并没有什么卵用。

这是我的会话配置:

// 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 });
    });
});
node.js express express-session
1个回答
2
投票

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

如果您构建 Vue 应用程序并通过 Express 提供服务,您将不会遇到此问题,并且会话将按预期共享。

但是对于开发来说,这会很烦人,你可以通过 Express 代理前端应用程序。

作为一个最小的示例,您可以尝试下面的代码。像平常一样运行你的 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(1234, '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
并刷新几次,您将看到会话值存在并且不会重置。

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