2009年9月2日星期三

[bug-fixed]修复WebChat

终于算是修复了WebChat的cookies失效问题。

首先,我对浏览器的onbeforeunload事件进行的拦截,每当遇到刷新和关闭等离开本页面的事件,就会询问是否要离开本页面。如果确认则自动退出,确保cookies与服务器登录状态的一致性。原来我依靠的方法是只要有cookies就会自动登录,但这解决不了cookies失效的第二个问题:

cookies是有自己的生存时间的,它会自我消失。
 
配合对onbeforeunload事件的拦截,我把cookies失效时间设为-1,则只有在浏览器或页面关闭时才会失效。避免了一般的误关闭标签页的问题。至于为什么拦截刷新等动作,是因为DWR库德原因,每刷新一次重新生成一个ScriptSession,这样会耗尽服务器资源。但是这样还存在隐患。就是:

关闭浏览器会有提醒,但是如果是任务管理器强行关闭或者操作系统直接关闭,也会导致cookies失效。

这点不知道Webqq怎么做的,所以只好用一个笨办法就是允许多点登陆,即允许同一账号多人同时登录。这样就不会因为浏览器被强行关闭而失去cookies并且没及时退出登录,导致永远无法再次登录了。

当然这样还不够完美:退出时,只要有一人退出,其他此账号的人也会退出。这点有待改正,Webqq不会有这问题,因为他是强行登陆会挤下其他登录者。

我的onbeforeunload事件拦截代码是:

        function onbeforeunload_handler(){         
            return "您真的要离开本页吗?离开本页会自动退出登录!"; 
        }
        function onunload_handler(){ 
            signOut();
        }
        function ShowConfirmClose(bValue) {
//            alert("ShowConfirmClose('"+bValue+"')");
            if(bValue) {
                window.onbeforeunload = onbeforeunload_handler;
                window.onunload = onunload_handler;
            } else {
                window.onbeforeunload = null;
                window.onunload = null;
            }
        }

只支持firefox和IE。不支持chrome。没试过其他浏览器。

PS:firefox的cookies在被任务管理器强行关闭后,仍旧会保存,但IE不行。
 


没有评论: