4

我很难让 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正在发生吗?

4

2 回答 2

6

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

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

于 2010-04-12T15:46:06.117 回答
1

我设法解决了这个问题。

在页面加载之间消除了双倍递增。只有在会话附加开始工作时才增加它。

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

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

有什么线索吗?

于 2010-04-13T11:25:23.523 回答