【问题标题】:Sailsjs session errorSailsjs 会话错误
【发布时间】:2015-03-24 23:02:26
【问题描述】:

当我打开我的应用程序但无法弄清楚时,不断收到此警告和错误。希望有人对此有所了解:

警告:套接字已断开,但无法加载会话以传递给配置的断开处理程序:sails.config.sockets.onDisconnect()。将一个假的、空的会话作为参数传递给生命周期回调。细节: 错误:无法加载会话 在 _createError (/Users/JAT/Dropbox/Bottage/bottage_app/node_modules/sails/lib/hooks/session/index.js:271:21) 在 Immediate._onImmediate (/Users/JAT/Dropbox/Bottage/bottage_app/node_modules/sails/lib/hooks/session/index.js:274:13) 在 processImmediate [as _immediateCallback] (timers.js:358:17) { [Error: Session could not be loaded] code: 'E_SESSION' }


wZVanG Edit:问题已经解决,但我想知道我是否有正确的配置:

sailsrc(我从默认创建的Sails中删除了模型,因为我只使用mongoose),但是sockets我不必删除它们:

"hooks": {"orm": false, "pubsub": false, "blueprints": false}

/config/sessions.js

adapter: 'mongo',
host: 'localhost',
port: 27017,
db: 'page',
collection: 'sessions',

这会将其存储在我的 Mongo 数据库中:

{
    "_id" : "Nt90RxTcHkOT9aM3qJ1QzxyHlnvFoUuw",
    "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{}}",
    "expires" : ISODate("2015-07-24T10:59:42.551Z")
}

对吗?

【问题讨论】:

    标签: sails.js


    【解决方案1】:

    该消息的原因是,当您重新启动sails 时,会话信息在服务器端被删除,但客户端仍然有一个会话cookie,当它重新连接时,它会重用之前的会话cookie 来识别哪个不再有效并且因此服务器会记录此警告。

    有多种方法可以防止出现此消息:

    1. 使用外部会话存储,例如 redis,它将会话数据从sails 中分离出来,并且即使在您重新启动sails 时也会保留它。见这里:http://sailsjs.org/documentation/reference/configuration/sails-config-session
    2. 如果不需要socket.io,则将其从项目中删除以删除客户端删除assets/js/dependencies/sails.io.js 和sails.io.js 包含tasks/pipeline.js 和服务器端的文件

    将此添加到.sails.rc

      {
        "hooks": {
          "sockets": false,
          "pubsub": false 
         }
      }
    
    1. 只需重新打开浏览器窗口,它将启动一个新的套接字会话

    【讨论】:

    • 我目前正在使用Sockets,请检查我的问题编辑
    • 您的配置看起来是正确的,如果为应用程序使用多个实例,则需要考虑的另一件事是将 Socket.IO 消息存储也移动到 mongo,否则sails 实例将无法为它们之间连接的客户端发布消息。为此,请安装 socket.io-adapter-mongo 并将以下行添加到 config/sockets.jsadapter: 'socket.io-adapter-mongo', adapterOptions: { host: 'localhost', port: 27017, db: 'mubsub' },
    • 多于一个实例是什么意思?我的服务器托管在 Google Cloud (Ubuntu) 上,我使用不同的端口(例如 8081, 8082, 8083)部署多个站点,并使用 Nginx 反向代理,这有什么关系吗?
    • 多个实例是如果您有多个进程(在同一服务器或不同服务器上)同时运行相同的sails.js 应用程序,看起来这是您的情况描述。
    • 谢谢,我没有在不同页面上使用套接字的案例,但我会尝试。
    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 2015-01-16
    • 2017-07-18
    • 2014-03-18
    • 1970-01-01
    • 2023-03-09
    • 2015-10-23
    • 1970-01-01
    相关资源
    最近更新 更多