Strophe Attach と Ejabberd でのセッション再開の問題
-
26-09-2019 - |
質問
strophe の「attach()」関数を機能させるのに非常に苦労しています。
私は、ユーザーがページをサーフィンしながら同時にチャット接続を維持するソーシャル ネットワークに取り組んでいます。すべてのページで再接続/再認証したくないので、このリンクに従って、 http://groups.google.com/group/strophe/browse_thread/thread/430da5e788278f3a/93c48c88164f382f?show_docid=93c48c88164f382f&fwc=1, 、アンロード時にSIDとRIDをCookieに保存しています。
次のページで、新しい SID と RID (1 ずつ増やした後) を使用しようとすると、セッションがすでに破棄されています。Ejabberd は「HTTP put でエラーが発生しました。理由:bad_key"
一体何が起こっているのでしょうか?
解決 2
なんとか問題を解決することができました。
ページの読み込みの間に、rid が 2 回インクリメントされていました。セッション接続が機能し始めた場合にのみ値を増加させます。
なぜセッションがキャンセルされたのかはわかりませんが、何が起こったのかは次のとおりです。
- RID は以前のものより +2 大きいため、ejabberd はリクエストをバッファに保存し、クライアントに転送しません。
- 次の 2 つのリクエストも保存されます
- その後のセッションでは、ejabberd がセッションをキャンセルします。
手がかりはありますか?
他のヒント
ejabberdまたはFirebugのからのより多くのログ情報がなければ、これは、診断が難しいでしょう。正しいRIDは、実際にはクッキーに保存されていますか? ejabberdは、あなたが送信された最後のスタンザでどのように考えず、それはRIDどのような値を持っているのですか?最初のスタンザと新しいページの最初のRID値は何ですか?どのくらいこれら二つのスタンザの間に?
更新:セッションはキャンセルされます理由は、BOSHのセキュリティモデルによるものです。効果的に、SIDとRIDペアは秘密です。あなたがペアを知っている場合は、セッションに接続することができます。推測することができるという形成する人々を保つために、RID ISは非常に大きな空間からランダムに選びました。あなたが現在のRIDからRID外に非常に小さなウィンドウを送信する場合、それはセッションを切断します。ウィンドウは、通常、(5 + RID、RID)程度である。