Strophe attach和Ejabberd的会话恢复问题

时间:2010-04-11 08:18:57

标签: javascript xmpp ejabberd strophe

我在使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放置错误。原因:bad_key”

WTF正在发生?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

我设法解决了这个问题。

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

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

  1. 由于RID比之前的RID高+2,因此ejabberd将请求存储在缓冲区中并且不会将其转发给客户端
  2. 接下来的2个请求也会存储
  3. 之后的那个导致ejabberd取消会话
  4. 任何线索?