showModalDialog模式对话框关闭引发的session丢失

最近在项目中发现了一个比较意外的BUG,在这里做个记录,也为遇到同类问题的朋友做一个分享。

BUG背景:

A页面上有个onbeforeunload事件处理函数,里面有一个处理窗口关闭时自动退出登录的操作,该操作有个条件,就是判断用户是不是按了ALT键或鼠标的坐标是不是在窗口左上角。

当A页面打开了一个模式对话框窗口,模式窗口关闭时有一个操作,会通过修改window.location.href重新定位一次A页面。

BUG描述:

当用ALT+F4关闭模式窗口时,A页面就会退回到登录画面去了,也就是说退出登录了,按正常来说应该只是刷新了一遍而已。

BUG分析:

一开始是以为模式对话框关闭时,因为会触发A页面上的onbeforeunload事件,而在关闭模式对话框的时候,又会再刷新A页面,从而又会再调用一次onbeforeunload事件,所以造成意外的两次调用,而这两次调用中,可能至少有一件符合自动退出登录的操作。

可是经过调查,通过设置断点的方式发现根本就没有调用到onbeforeunload事件。

因为之前也知道IIS、IE有意外丢失SESSION的问题,尤其是在模式对话框中,所以开始怀疑问题出在页面刷新的地方。因为这里关闭模式对话框,马上就要重定位A页面,两个操作连在一起,响应太快太频繁。

BUG解决:

因为分析是刷新过快,所以在关闭模式窗口时重定位这里用了setTimeout延迟了200毫秒,然后再刷新A页面,问题完全解决。


郑重声明:
除特别声明为转载内容外,本站所有内容均为作者原创,谢绝任何单位和个人不经许可的复制和转播!
对于确有转载需要的,请先与作者联系,在获得允许后烦请在转载时保留文章出处。
本文出自Lupin's Blog:http://www.cnzui.com/archives/829