根据每个客户的请求表达 sessionID 的变化
Express sessionID changes on every client's request
我的问题:
当我转到服务器地址(所以我使用 get 方法)时,它按我希望的方式工作,sessionID 不会根据 HTTP 请求而改变,但是当我使用客户端的 fetch
方法来获取服务器地址,sessionID总是变化,这是缺陷,我不想要的。
知道为什么会这样吗?我该如何解决?
我的会话设置代码:
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
}, []);
正如 Mat J. 所说,默认情况下,fetch 不会发送 cross-origin 的 cookie,因此我不得不更改它:
fetch(getServerAdress() + "/lobby/" + code, {
method: "GET",
credentials: "include",
}
我还必须在我的服务器上为 CORS 启用凭据和来源:
const cors = require("cors");
app.use(cors({ credentials: true, origin: true }));
我的问题:
当我转到服务器地址(所以我使用 get 方法)时,它按我希望的方式工作,sessionID 不会根据 HTTP 请求而改变,但是当我使用客户端的 fetch
方法来获取服务器地址,sessionID总是变化,这是缺陷,我不想要的。
知道为什么会这样吗?我该如何解决?
我的会话设置代码:
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
}, []);
正如 Mat J. 所说,默认情况下,fetch 不会发送 cross-origin 的 cookie,因此我不得不更改它:
fetch(getServerAdress() + "/lobby/" + code, {
method: "GET",
credentials: "include",
}
我还必须在我的服务器上为 CORS 启用凭据和来源:
const cors = require("cors");
app.use(cors({ credentials: true, origin: true }));