node.js - 请求之外的 session 、验证和操作

标签 node.js mongodb session redis

我的应用程序在登录时将用户的文档从数据库加载到 redis session 中。然后它会针对 session 对象执行几乎所有请求验证。

问题:在请求/响应周期之外修改正在进行的 session 以更新验证信息。

例如,如果用户订阅了博客帖子类别,他们可以阅读该类别中的帖子并为该类别做出贡献。但是,如果该类别的版主决定删除它,那么我不仅需要从磁盘上数据库中的用户文档中删除该类别,还需要从 Redis 中的用户 session 中删除该类别。

据我所知,我能做到这一点的唯一方法是在数据库中保存对用户文档中 session ID 的引用,然后在 Redis 中查找相应的 session 。

问题是我不确定 session 是否设计为在请求/响应周期之外进行修改,因为当我进行谷歌搜索时,我还没有真正看到任何相关主题的人想要这样做。

最佳答案

我不认为在 mongo 上存储有关 session 的信息是个好主意。如果用户同时从两个设备登录会怎样?我想在这种情况下您将有两个 session 对象(否则,应该有一种机制来猜测给定用户的 session ,这样您就不会遇到当前的问题)。

我的建议是将用户启动的一组 session 存储在 redis 中。当用户登录时,您将新的 session ID 添加到 SET 中,用户 ID 作为 key 的一部分。当用户注销时,您从 SET 中删除相应的条目。

当然,如果用户没有手动注销(如果您有这种行为), session 就会过期。为此,您可以在每次启动新 session 时将 SETEXP 设置为用户集。只要您的 SETEXP 时间比您的 session 到期时间稍长,您就可以确定只要您的 session 存在, session 就会存储在您的 SET 中。

新版本的 redis 将有一个 Observe 命令,可以更容易地删除从您的 set 对象中删除的 session 。您只需要观察 session 对象的创建/删除,您就可以根据它来管理您的 SET 插入/删除。在该命令正式发布之前,您将不得不坚持按时间过期。

关于node.js - 请求之外的 session 、验证和操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21278643/

相关文章:

php - 一种无需编辑 php.ini 即可生成自定义 session ID 的方法

python - Tensorflow:在类中创建图形并在外部运行

Node.js 在 app.post 之外获取响应

javascript - 表示忽略 View 目录

node.js - 具有非空字段的 MongoDB/Mongoose 权重记录

javascript - 使用 Node 的 `response.end` 方法和 promise

node.js - 使用 ExpressJS 在 AppFog 上进行 session

mysql - 适合大表的良好数据库,具有简单的键访问

grails - Gorm MongoDB 1.0-M2-保存/获取时选择集合

node.js - MongoDB $text 搜索是如何工作的?