如果页面刷新,则重置XMPP连接

时间:2012-03-09 10:56:07

标签: javascript xmpp ejabberd strophe xmppframework

我正在尝试使用javascript与我的ejabberd服务器创建与XMPP的连接,我可以在页面加载时建立连接,并且在单击断开连接按钮时能够断开连接。

现在的问题是,连接是活的,如果用户意外刷新页面,那么我的javascript正在尝试再次连接,并回应我得到的。 (这只是因为以前的连接可能仍然存在)

<body xmlns='http://jabber.org/protocol/httpbind'>
    <failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
            <not-authorized/>
    </failure>
</body>

过了一段时间,如果我再次刷新页面,那么连接将成功建立,那么如果页面被意外刷新以便用户获得无缝连接,我该如何重置连接。

2 个答案:

答案 0 :(得分:3)

如果您希望在页面刷新期间保持连接,请将jidsidrid变量以及所需的任何其他状态保存在sessionStorage之类的内容中。然后,您可以使用attach()恢复XMPP会话。

答案 1 :(得分:0)

您使用相同的JID登录,这是不允许的。您需要为JID设置随机资源以确保没有冲突。因此,不应使用JID user@domain记录用户,而应使用JID user@domain/some_random_resource

另外,作为一个原则问题,你也可以听onbeforeunload并断开连接。这不适用于基于webkit的浏览器,但可以与其他浏览器一起使用。