我很难让 strope 的“attach()”功能正常工作。

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

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

WTF 正在发生吗?

有帮助吗?

解决方案 2

我设法解决了这个问题。

在页面加载之间,rid 会双倍递增。仅在会话附加开始工作后才增加它。

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

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

有什么线索吗?

其他提示

在不偏离ejabberd或萤火虫更多记录的信息,这将是很难诊断。是正确RID实际存储在cookie?什么是ejabberd认为是你发来的最后一节,什么RID值不会有多少?什么是第一节和新的页面上的第一个RID值?如何这两个节之间的长?

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top