Sails JS中的当前会话ID

时间:2018-10-12 09:54:43

标签: node.js session sails.js

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

例如:

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

sails.js版本1.1.0-3

2 个答案:

答案 0 :(得分:1)

如果我对您的问题的理解正确,那么req.session.destroy()就是您的答案。

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

答案 1 :(得分:1)

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

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

  • 在您的sails应用中创建一个可以称为SessionMapper

    的模型
    • 添加三列:userID,sessionID和isActive(布尔值)。
  • 现在,只要用户登录,就可以在此模型/表中创建一个条目。

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

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

注意:此方法将增加与READ连接的datasource的许多SessionMapper操作。如果会影响主要操作,请将其移至更好和高效的解决方案,例如Redis / Memcached。

我希望这个伪代码可以帮助您完成任务。 @tspentzas,下次您寻求解决方案时,请将到目前为止您尝试过的所有内容添加到您的问题中,以使社区更好地为您提供帮助。