【问题标题】:How can I check if a Express.js session is active?如何检查 Express.js 会话是否处于活动状态?
【发布时间】:2021-09-18 13:00:45
【问题描述】:

我试图检查 Express.js 会话中的会话是否处于活动状态,但找不到任何相关内容。我正在使用connect-mongo 将我的会话存储在 MongoDB 存储中。我基本上需要检查用户的会话是否处于活动状态以在他们的头像上显示一个活动图标(前端不包括在这个问题中)。我只想创建后端 API 来做到这一点。

感谢您的帮助。

【问题讨论】:

  • 您对“活动会话”的定义是什么?是什么让它活跃?
  • @KrisztianNagy - 如果您阅读实际问题,这不会帮助他们解决他们试图解决的问题。他们希望在其他用户登录时向其他用户显示活动状态。
  • 是的@jfriend00 那么,Facebook 是如何做到的。假设您访问 facebook,并且您的个人资料的前端有一个小绿点。所以我想做的是重新创建该功能的后端。就像获取用户的活动状态一样。希望这是有道理的。
  • 请定义您所说的“活跃”是什么意思?这就是一切的开始。你必须定义它。
  • 问题在于它对于电池供电的设备效率不高,因为它们需要不断地与服务器通信。而且,移动浏览器会在它不是前台时立即关闭您的通信以节省电池。最好只记录和跟踪客户端和服务器之间的自然活动并将其用作指示。如果存在被视为“活动”的仅限客户端的操作,那么您可以在这些操作发生时每隔一段时间通知服务器。

标签: javascript node.js mongodb express session


【解决方案1】:

现在您的数据库中可能有一堆会话。为了在您的 express-app 中找到它们,您需要创建一个模式以便 mongoose 知道要查找的内容:

// models/session.js
const sessionSchema = new mongoose.schema ({ 
  expires: Date,
  session: String,
});

module.exports = mongoose.model('Session', sessionSchema);

然后,您需要在代码中的某处使用 mongoose 来查看此集合,例如:

const sessions = await Session.find({}).lean();
console.log(sessions) // sessions stored in the database

然后你应该得到你的结果。您可能有很多会话,因此您需要查看会话密钥并过滤掉您要查找的内容。

【讨论】:

  • 感谢您的回答。我已经设法为每个对象使用 redis 和 TTL 来实现这一点,这样如果用户在 2 分钟内没有向某个路由发送 GET 请求,那么该对象将从 redis 中删除,从而使用户“具有吸引力”跨度>
【解决方案2】:

我已经设法使用 Redis 实现了这一点。我为每个对象设置了一个 TTL(生存时间),这样如果用户在一段时间内没有向某个路由发送 GET 请求,则该对象将从 Redis 中删除,从而使用户 "incative"当其他人获取他们的状态时。

【讨论】:

    猜你喜欢
    • 2013-10-29
    • 2012-12-08
    • 1970-01-01
    • 2019-03-21
    • 2018-06-29
    • 2017-07-06
    • 2020-01-11
    • 2019-12-10
    • 1970-01-01
    相关资源
    最近更新 更多