Проблема возобновления сеанса с приложением Strophe и Ejabberd - PullRequest
4 голосов
/ 11 апреля 2010

Мне очень трудно заставить работать функцию присоединения () (strophe).

Я работаю в социальной сети, где пользователи будут просматривать страницы и одновременно поддерживать связь в чате. Я не хочу переподключаться / повторно авторизоваться на каждой странице, поэтому по этой ссылке http://groups.google.com/group/strophe/browse_thread/thread/430da5e788278f3a/93c48c88164f382f?show_docid=93c48c88164f382f&fwc=1, я сохраняю SID и RID в файле cookie при загрузке.

На следующей странице, когда я пытаюсь использовать новые SID и RID (после увеличения его на 1), моя сессия уже уничтожена. Ejabberd сообщает: «Ошибка при установке HTTP. Причина: bad_key»

WTF происходит?

Ответы [ 2 ]

6 голосов
/ 12 апреля 2010

Без дополнительной информации о регистрации от ejabberd или Firebug это будет трудно диагностировать. Правильный ли RID хранится в куки? Что Ejabberd считает последней отправленной вами строфой, и какое значение имеет RID? Что такое первая строфа и первое значение RID на новой странице? Как долго между этими двумя строфами?

Обновлено: причина отмены сеанса связана с моделью безопасности BOSH. Фактически, пара SID и RID является секретной. Если вы знаете пару, вы можете присоединиться к сеансу. Чтобы люди могли быть в состоянии угадать, RID выбирается случайным образом из очень большого пространства. Если вы отправите RID за очень маленькое окно из текущего RID, он отключит сеанс. Окно обычно (RID, RID + 5) или около того.

1 голос
/ 13 апреля 2010

Мне удалось решить проблему.

Рид был дважды увеличен между загрузками страницы. Увеличивая его только после того, как присоединение сеанса начало работать.

Я не знаю, почему сеанс был отменен, но вот что произошло:

  1. Поскольку RID на +2 больше, чем предыдущие, ejabberd сохраняет запрос в буфере и не передает его клиентам
  2. Следующие 2 запроса также сохраняются
  3. После этого ejabberd отменяет сеанс

Есть какие-нибудь подсказки?

...