2010-04-11 4 views
3

J'ai beaucoup de mal à faire fonctionner la fonction 'attach()' de strophe.Problème de reprise de session avec Strophe attach et Ejabberd

Je travaille sur un réseau social où les utilisateurs vont naviguer sur des pages et en même temps garder leur connexion. Je ne veux pas me reconnecter/reauthorize sur chaque page de sorte que par ce lien, http://groups.google.com/group/strophe/browse_thread/thread/430da5e788278f3a/93c48c88164f382f?show_docid=93c48c88164f382f&fwc=1, je stocke le SID et RID dans un cookie onunload.

Sur la page suivante lorsque j'essaie d'utiliser les nouveaux SID et RID (après l'avoir incrémenté de 1), ma session est déjà détruite. Ejabberd signale "Erreur lors de l'envoi HTTP Raison: bad_key"

WTF est en cours?

Répondre

1

J'ai réussi à résoudre le problème.

Le disque était incrémenté deux fois entre les charges de page. En l'incrémentant seulement une fois que la session attach a commencé à fonctionner.

Je ne sais pas pourquoi la session a été annulé, mais voici ce qui est arrivé:

  1. Parce que le RID est plus 2 que les précédentes, ejabberd stocke la demande dans un tampon et ne transmet pas à clients
  2. les 2 prochaines demandes se
  3. également stockées
  4. l'un après qui provoque ejabberd pour annuler la session

Des indices?

5

Sans plus d'informations de journalisation de ejabberd ou Firebug, cela sera difficile à diagnostiquer. Le RID correct est-il réellement stocké dans le cookie? Qu'est-ce que pense ejabberd est la dernière strophe que vous avez envoyée, et quelle valeur RID a-t-elle? Quelle est la première strophe et la première valeur RID sur la nouvelle page? Combien de temps entre ces deux strophes?

Mise à jour: La raison pour laquelle la session est annulée est due au modèle de sécurité de BOSH. Effectivement, les paires SID et RID sont secrètes. Si vous connaissez la paire, vous pouvez joindre à la session. Afin de garder les gens capables de deviner, le RID est pris au hasard dans un très grand espace. Si vous envoyez un RID en dehors d'une très petite fenêtre du RID actuel, il déconnectera la session. La fenêtre est généralement (RID, RID + 5) ou plus.