【问题标题】:Session resume problem with Strophe attach and EjabberdStrophe attach 和 Ejabberd 的会话恢复问题
【发布时间】:2011-02-06 16:03:16
【问题描述】:

我很难让 strophe 的“attach()”函数正常工作。

我正在开发一个社交网络,用户将在其中浏览网页,同时保持他们的聊天连接。我不想在每个页面上重新连接/重新授权,因此根据此链接 http://groups.google.com/group/strophe/browse_thread/thread/430da5e788278f3a/93c48c88164f382f?show_docid=93c48c88164f382f&fwc=1,我将 SID 和 RID 存储到 cookie onunload 中。

在下一页上,当我尝试使用新的 SID 和 RID(将其增加 1 后)时,我的会话已被破坏。 Ejabberd 报告“HTTP put 错误。原因:bad_key”

WTF 正在发生吗?

【问题讨论】:

    标签: javascript xmpp ejabberd strophe


    【解决方案1】:

    如果没有来自 ejabberd 或 Firebug 的更多日志信息,这将很难诊断。正确的 RID 是否实际存储在 cookie 中? ejabberd 认为您发送的最后一节是什么,它的 RID 值是多少?新页面上的第一节和第一个 RID 值是什么?这两节间隔多长时间?

    更新:会话被取消的原因是由于 BOSH 的安全模型。实际上,SID 和 RID 对是保密的。如果您知道这对,则可以附加到会话。为了让人们能够猜测,RID 是从一个非常大的空间中随机挑选出来的。如果您在当前 RID 的一个非常小的窗口之外发送 RID,它将断开会话。窗口通常是(RID,RID + 5)左右。

    【讨论】:

      【解决方案2】:

      我设法解决了这个问题。

      rid 在页面加载之间增加了两倍。通过仅在会话附加开始工作时增加它。

      我不知道为什么会议被取消了,但事情是这样的:

      1. 由于 RID 比之前的 RID 多 +2,ejabberd 将请求存储在缓冲区中并且不会将其转发给客户端
      2. 接下来的 2 个请求也会被存储
      3. 之后导致 ejabberd 取消会话

      有什么线索吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-12
        • 1970-01-01
        • 2011-10-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多