2010-04-11 57 views
3

我有很多困難讓strophe的附加()功能工作。會話恢復問題與Strophe附加和Ejabberd

我正在開發一個社交網絡,用戶將瀏覽網頁並同時保持聊天連接。我不想重新連接/重新授權在每個頁面上,根據此鏈接,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正在發生?

回答

1

我設法解決了這個問題。

擺脫頁面加載之間的雙倍遞增。只有在會話連接開始工作後才增加它。

我不知道爲什麼會被取消了,但在這裏發生了什麼事:

  1. 因爲RID是比以往更+2,ejabberd存儲緩衝區的請求,它不會轉發到客戶
  2. 未來2個請求也能保存
  3. 導致ejabberd取消會議

任何線索後,一個?

5

沒有來自ejabberd或Firebug的更多日誌信息,這將很難診斷。實際存儲在cookie中的RID是否正確? ejabberd認爲你發送的最後一節是什麼,它具有什麼RID值?什麼是新頁面上的第一節和第一個RID值?這兩段之間有多長?

更新:會話被取消的原因是由於BOSH的安全模型。實際上,SID和RID對是祕密的。如果你知道這對,你可以附加到會話。爲了保持人們能夠猜測,RID是從一個非常大的空間隨機挑選的。如果您從當前RID的非常小的窗口外發送RID,它將斷開會話。窗口通常是(RID,RID + 5)左右。