Sails js 中的当前会话 ID

Current session id in sails js

我想在sails.js中一键删除所有设备的所有会话。如何获取当前会话id?

例如:

console.log(req.session.sessid) // sess:jV-M6_ZNCp-8x_jYPbSfbUilXd_T85i_

sails.js 版本 1.1.0-3

如果我从你的问题中理解正确,req.session.destroy() 就是你的答案。

https://sailsjs.com/documentation/reference/blueprint-api/destroy

所有会话都不知道它们属于哪个用户除非您已将会话映射到持久存储系统中,例如Redis/Memcached缓存或MySQL、MongoDB数据库。

我能想到的众多解决方案之一如下:

  • 在您的 sails 应用程序中创建一个可以调用的模型 SessionMapper

    • 添加三列:userID、sessionID 和 isActive(布尔值)。
  • 现在,每当用户登录时,都会在此 model/table 中创建一个条目。

  • 创建一个中间件,所有 API 请求(/login 和 public API 除外)都将通过该中间件流动
    • 此中间件将检查当前会话是否仍处于活动状态——充当额外的身份验证层。
      • 如果会话处于活动状态,则授予访问权限/next()
      • 如果会话无效或 isActive === false,请在内部注销用户并重定向到带有一些消息的登录页面。

要注销用户的所有活动会话,请在 SessionMapper 模型中为 userID = <user-id> 设置 isActive = false

注意:该方法会在连接SessionMapperdatasource上增加很多READ操作。如果它损害了主要操作,请将其移至更好、更高效的解决方案,例如 Redis/Memcached。

我希望这个伪代码能帮助你完成你的任务。 @tspentzas,下次当您寻求解决方案时,请在您的问题中添加 到目前为止您尝试过的任何内容,以便社区以更好的方式帮助您。