关于这个需求我想不管是大项目还是小项目都是必要的,网上问的人也比较多,同样我也遇到了这样的需求,查阅了不少这方面的资料。然后通过实践,总结了一下。
鼠标点击X窗口关闭IE的同时清空session,最基本的就是处理用户重复登陆需要 用到,我想这个的关键在于如何捕捉到关闭IE这个动作,之后再根据自身的需要使用session.invalidate()或者 session.removeAttribute( "xxx ")都是水到渠成的事情。
下面我们就重点看看如何捕捉这个动作:
首先现在的系统的页面结构一般分为2种,
框架的和非框架的。
框架的:
<script language="javaScript">
function removeline(){
if(event.clientX<0&&event.clientY<0){
alert("我进入了removeline方法啦,说明捕捉有效!");
document.write('<iframe width="100" height="100" src="XXX.jsp"></iframe><OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>');
document.all.WebBrowser.ExecWB(45,1);
}
}
</script>
然后只需要在frameset里面调用该方法即可。
<frameset 。。。。。。。。。。。。。 onUnload="removeline();">
</frameset>
几点注意之 处:if(event.clientX<0&&event.clientY<0)这个条件没有对alt+F4关闭IE进行捕 捉,如果想添加,要改成if((event.clientX<0&&event.clientY<0&&) ||event.altKey)
Removeline方法中的XXX.JSP是你写具体如何清楚session的页面。
非框架的:
对于非框架的的处理和框架的会有所不同,实现方法如下;
<script language="javascript">
function window.onunload(){
if((window.screenLeft>=10000 && window.screenTop>=10000)||event.altKey)
{
alert("识别到关闭IE啦!!!");
}
}
</script>
By The Way:最后我想说的是,建议系统使用框架的页面结构,这样做的好处很多了,单就权限而言也有不少有利之处。
首先,为什么要清空SESSION呢?清空session肯定是为了根据session来控制什么,实现某种 判断,我们所谓的关闭IE时清空session,是指清空服务器端的session,众所周知,对于客户端的session,是随着你关闭IE的同时就自 动的销毁的。因此,这样以来,如果使用非框架结构,就会带来一些问题,很简单的一个例子就是你打开了系统的3个页面,然后你X掉其中的一个页面,那么自然 触发了清空session的方法,所以这时服务器的对应session应该被清除,而你仍然开着的页面怎么办呢。。。。。。。。。。
框架结构的好处就是始终只运行一个页面,避免了上述问题的产生,当然使用框架的好处还有很多,在这里就不一一赘述了
在下水平有限,如有不妥的地方还请大家不吝指教!