javascript - 只保存特定请求的用户 session

标签 javascript node.js mongodb express-session

我正在使用 connect-mongoexpress-session跟踪用户的 session 。我有以下代码来设置 session :

app.use(session({
    secret: 'scamp',
    store: new MongoStore({
        mongooseConnection: mongoose.connection,
        ttl: 60 * 30 // half hour
    })
}));

问题在于,每次发送到服务器的请求都会创建一个 session 。例如,我使用 Amazon Web Services 来托管我的应用程序,并且每 10 秒向我的服务器发送一个请求以确保它仍然正常运行(称为运行状况检查)。健康检查请求是对 mydomain/health 的 GET 请求。但是使用我拥有的代码,这将创建一个新 session ,该 session 存储在我的远程 Mongo Db 的 session 集合中。所以数据库增长得非常快。

一些背景:我的应用程序允许用户上传文件,然后与每个文件进行交互。我只希望 session 跟踪用户正在与之交互的当前文件(在我的 session 中,我保留当前文件 ID、文件路径、选择的当前文件参数等)。所以基本上,我只想为我的 API 的某些请求设置 session ,而不是全部。

所以我想我会重写我的代码:

var setsession = function (req, res, next){

    session({
        secret: 'scamp',
        store: new MongoStore({
            mongooseConnection: mongoose.connection,
            ttl: 60 * 30 // half hour
        })
    })

    next();
};

app.use(setsession);

然后我计划在 setSession() 中进行检查以查看请求端点是什么,如果请求是我想要 session 的事件之一,则设置 session 。但是,在更改上面的代码后,这会立即破坏我的应用程序。下面我有:

app.get('/api/canvas', function(req, res) {

    sess = req.session;

    var callback = function() {

        graphController.constructGraph();
    };

    console.log('req.session is ', req.session);

    var graphController = new GraphController(req, res, sess, callback);
});

现在,在将 session() 移出 app.use 并进入它自己的方法后,req.session 是 undefined 并且我的应用程序休息。知道为什么会这样吗?

此外,这是停止在每次向 API 发出请求时存储 session 的好方法吗?

最佳答案

有一个 saveUninitialized 选项可以防止 session 在不包含任何数据时被保存。

app.use(session({
    secret: 'scamp',
    store: new MongoStore({
        mongooseConnection: mongoose.connection,
        ttl: 60 * 30 // half hour
    }),
    saveUninitialized: false
}));

Forces a session that is "uninitialized" to be saved to the store. A session is uninitialized when it is new but not modified. Choosing false is useful for implementing login sessions, reducing server storage usage, or complying with laws that require permission before setting a cookie. Choosing false will also help with race conditions where a client makes multiple parallel requests without a session.

The default value is true, but using the default has been deprecated, as the default will change in the future. Please research into this setting and choose what is appropriate to your use-case.

https://www.npmjs.com/package/express-session#saveuninitialized

关于javascript - 只保存特定请求的用户 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35970427/

相关文章:

javascript - csv 到 json 转换错误

javascript - JSON 重复项不会出现在 console.log() 中

node.js + mongodb + 多个实体的原子更新 = 头疼

javascript - 是否可以格式化对象内的日期?

javascript - 我应该如何在单个项目的多个文件中要求或使用相同的模块?

javascript - 如何访问 javascript 中的 laravel .env 变量?

php - 需要使用 MongoDB.so 扩展名的 Symfony 2 MongoDB 包

javascript - 如何压缩代码中的 Javascript?

android - 文件 style.xml 中不支持的 Node 'item'

c# - 用于检查二进制字段是否为空的 MongoDB 过滤器