gpt4 book ai didi

node.js - 为什么我的快速 session 没有持续存在以及为什么我会为每个请求创建一个新 session (或多个 session )

转载 作者:太空宇宙 更新时间:2023-11-03 22:19:57 27 4
gpt4 key购买 nike

我有一个使用 Express-Sessions 的基本 Node.js Express 应用程序。

请有人帮忙解释为什么 session 没有持续存在以及为什么为每个请求创建一个新 session 。

应用程序本身相当大,因此我添加了以下重要设置的简化案例。

const express = require('express');
const session = require('express-session');
const MongoDBStore = require('connect-mongodb-session')(session);

// initialise express
const app = express();
// initialise db session store
const store = new MongoDBStore({
uri: MONGODB_URI,
collection: 'sessions',
// can also set expire here for auto cleanup by mongodb
});

app.use(session({
secret: 'secret password',
resave: false,
saveUninitialized: false,
httpOnly: false,
secure: app.get('env') === 'production',
store,
}));

...routes

在用户登录路由中,应用程序将请求用户设置为 session 并保存 session 。预计此 req,session.user 将在页面之间持续存在,但事实并非如此。在每个页面请求上,我可以看到正在创建一个新 session (或者有时是多个 session ,每个文件请求 1 个 session )。

最佳答案

更新

TL:DR;- robots.txt 如果不处理会导致问题,请将 DEBUG env 设置为express-session 进行故障排除

经过一番努力,我找到了解决方案和一些有用的故障排除技巧。

运行应用程序时,将调试设置为express-session 来运行它。

因此,对于像我这样的新手来说,请使用与此类似的命令运行您的应用程序:

DEBUG=express-session node 'bin/www.js'

DEBUG=express-session node app.js

取决于您如何设置应用入口点。

执行此操作将打印与 session 相关的日志消息,以便您可以排除 cookie 是否确实随每个请求发送的问题。错误消息将如下所示:

  express-session fetching 0wgmO1264PsVvqeLqaIIXd6T0ink0zts +34s
express-session session found +49ms

要解决多个请求导致每个页面加载多个 session 的问题,请在应用顶部添加一个中间件,然后再添加任何其他中间件。这将使我们能够查看请求 URL 并排除哪些请求可能干扰我们的 session 。

// see what requests are being sent and which ones contain cookies
app.use((req, res, next) => {
const { url } = req;
const isCookieSent = req.headers.cookie;
console.log({ url });
console.log({ isCookieSent });
next();
});

通过这样做,我发现罪魁祸首是 robots.txt 文件,显然默认情况下唯一被忽略的路径是 favicon.ico。

因为这个 robots.txt 路径没有正确处理,也没有发送 cookie,所以导致重复请求,并且导致 cookie 无法持久。

要解决此问题,您需要在访问 session 中间件之前处理或忽略此请求。

我使用这个中间件做到了这一点,再次相当高。

app.get('/robots.txt', (req, res) => {
res.type('text/plain');
res.send('User-agent: *\nDisallow: /');
});

我是 Node.js 的新手,所以如果有人有更多的知识,请随时提供额外的信息或更干净的方法来解决这个问题。希望这可以为你们中的一些人省去很多麻烦!

关于node.js - 为什么我的快速 session 没有持续存在以及为什么我会为每个请求创建一个新 session (或多个 session ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58356055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com