Retomine o problema da sessão com a adesão de estrofe e ejabberd
-
26-09-2019 - |
Pergunta
Estou tendo muita dificuldade em fazer funcionar a função 'Anex ()' de Strophe.
Estou trabalhando em uma rede social em que os usuários estarão navegando páginas e, ao mesmo tempo, manterão a conexão de bate -papo. Não quero reconectar/reautorizar em todas as páginas, então, de acordo com este link, http://groups.google.com/group/strophe/browse_thread/thread/430da5e788278f3a/93c48c88164f382f?show_docid=93c48c88164f382f&fwc=1, estou armazenando o SID e me livrará em um biscoito onunload.
Na página seguinte, quando tento usar o novo SID e me livrar (depois de incrementá -lo em 1), minha sessão já foi destruída. Ejabberd relata "Erro no http put. Motivo: Bad_key"
WTF está acontecendo?
Solução 2
Consegui resolver o problema.
O RID estava sendo duplo incrementado entre as cargas de página. Ao incrementá -lo apenas quando a sessão, o anexo começou a funcionar.
Não sei por que a sessão foi cancelada, mas aqui está o que aconteceu:
- Como o RID é +2 a mais do que os anteriores, Ejabberd armazena a solicitação no buffer e não a encaminha aos clientes
- Os próximos 2 pedidos também são armazenados
- Aquele depois disso faz com que Ejabberd cancele a sessão
Alguma pista?
Outras dicas
Sem mais informações de registro de Ejabberd ou Firebug, isso será difícil de diagnosticar. O livre correto está realmente armazenado no biscoito? O que Ejabberd acha que é a última estrofe que você enviou e que valor de livros ele tem? Qual é a primeira estrofe e o primeiro valor de Rid na nova página? Quanto tempo entre essas duas estrofes?
Atualizado: o motivo pelo qual a sessão é cancelada é devido ao modelo de segurança do BOSH. Efetivamente, o par Sid e Rid são secretos. Se você conhece o par, pode anexar à sessão. Para manter as pessoas serem capazes de adivinhar, o RID é escolhido aleatoriamente de um espaço muito grande. Se você enviar um livro para fora de uma janela muito pequena do RID atual, ela desconectará a sessão. A janela é geralmente (livrar, livrar + 5) ou mais.