NodeJS 在每个客户端请求时快速更改会话ID

xghobddn  于 12个月前  发布在  Node.js
关注(0)|答案(2)|浏览(117)

**我的问题:**当我去服务器地址(所以我使用get方法),它是工作,因为我希望它的工作,会话ID不改变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
}, []);

t9aqgxwy

t9aqgxwy1#

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

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

字符串
此外,我还必须在我的服务器上启用CORS的凭据和来源:

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

jm81lzqq

jm81lzqq2#

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

相关问题