Strope Attach 和 Ejabberd 的会话恢复问题
-
26-09-2019 - |
题
我很难让 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 会双倍递增。仅在会话附加开始工作后才增加它。
我不知道为什么会议被取消,但发生了这样的事情:
- 因为RID比之前的多+2,所以ejabberd将请求存储在缓冲区中并且不将其转发给客户端
- 接下来的 2 个请求也会被存储
- 之后的一个导致 ejabberd 取消会话
有什么线索吗?
其他提示
在不偏离ejabberd或萤火虫更多记录的信息,这将是很难诊断。是正确RID实际存储在cookie?什么是ejabberd认为是你发来的最后一节,什么RID值不会有多少?什么是第一节和新的页面上的第一个RID值?如何这两个节之间的长?
更新:会议被取消的原因是由于BOSH的安全模型。实际上,SID和RID对是秘密。如果你知道的对,你可以连接到会议。为了使人们形成能够猜到,RID是随机地从一个非常大的空间挑选。如果从当前的RID发送RID外一个非常小的窗口,它将断开会话。窗口通常为(RID,RID + 5)左右。
不隶属于 StackOverflow