Express sessionID 根据每个客户端的请求而更改

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

我的问题: 当我转到服务器地址(所以我使用 get 方法)时,它正在按照我希望的方式工作,sessionID 不会根据 HTTP 请求而更改,但是当我使用客户端的

fetch
方法来访问时服务器地址,会话ID总是改变,这是缺陷,我不想要的。

有什么想法为什么会发生这种情况以及如何解决它吗?

我的会话设置方式的代码:

const session = require('express-session');

...

app.set("trust proxy", 1);
app.use(
  session({
    secret: process.env.SESSION_SECRET,
    saveUninitialized: true,
    resave: false,
    cookie: {
      secure: false,
      sameSite: true,
    },
  })
);

...

app.get("/lobby/:id", (req, res) => {
  console.log(req.sessionID);
  req.session.test = 1;
});

客户要求

useEffect(() => {
  fetch(getServerAdress() + "/lobby/" + code, {
    method: "GET",
  })
    .then((response) => response.json())
    .then((data) => setLoading(false))
    .catch(() => setLoadingText("Failed to join the lobby"));
  // eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
javascript node.js fetch express-session
2个回答
4
投票

正如 Mat J. 所说,fetch 默认情况下不会发送跨域的 cookie,所以我必须更改它:

fetch(getServerAdress() + "/lobby/" + code, {
    method: "GET",
    credentials: "include",
}

我还必须在我的服务器上启用 CORS 的凭据和来源:

const cors = require("cors");
app.use(cors({ credentials: true, origin: true }));

0
投票

也许,只是也许,您或您的客户正在 Chrome 或 Firefox 的私人模式下浏览该网站。我按照网上的所有步骤,花了几个多小时,最后才切换到正常浏览。这解决了问题。

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