重置XMPP连接,如果页面被刷新
我想创建一个strophe连接与XMPP使用javascript与我的ejabberd服务器,我能够建立一个连接,当页面加载,并能断开连接点击断开按钮时。重置XMPP连接,如果页面被刷新
现在的问题是,连接是活着的,如果用户意外刷新页面,那么我的JavaScript正试图再次进行连接,并作出回应,我越来越。 (它只是因为以前的连接可能还活着)
<body xmlns='http://jabber.org/protocol/httpbind'>
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
<not-authorized/>
</failure>
</body>
,一段时间后,如果我刷新页面,然后再次连接将获得成功建立,所以我怎么能的情况下复位连接,如果该页面是意外刷新以便用户获得无缝连接。
我猜你用相同的JID登录,这是不允许的。您需要为您的JID设置一个随机资源以确保没有冲突。因此,不应使用JID [email protected]
登录用户,而应使用JID [email protected]/some_random_resource
。
同样作为一个原则问题,你也可以听onbeforeunload
并在那里断开连接。这不适用于基于webkit的浏览器,但可以与其他浏览器一起使用。
如果您希望在整个页面刷新过程中保持连接状态,请将jid
,sid
和rid
变量与您需要的任何其他状态保持一致,如sessionStorage。然后,您可以使用attach()
恢复XMPP会话。
那么,因为我的前端是JavaScript,所以我不管我可以管理会话的事情,我所能做的就是在查询字符串中传递这些属性,但是最终查询字符串会变大 – Hunt 2012-03-10 06:00:37
我的意思是,您可以尝试保存这些ID与HTML5 [localStorage](http://dev.w3.org/html5/webstorage/#the-sessionstorage-attribute)机制。 – Zash 2012-03-10 06:55:28
localStorage将* not *工作,因为它跨标签/窗口持久。 sessionStorage会工作,但不能解决他的页面重新加载问题。 – ggozad 2012-03-10 09:09:40
你使用了什么认证机制或后端? – Zash 2012-03-10 05:56:44
身份验证在ejabberd中实现,所以它是DIGEST-MD5 PLAIN – Hunt 2012-03-10 14:09:13