关键字: IE 关闭窗口 清除Session
一般的会员形式的网站,在会员登陆后都会建立会话或者Cookie,然后需要在会员退出时点退出连接或按纽退出。在会员直接关闭窗体的时候,没有触发涉及到退出的一系列退出。而这些要等到服务器会话过期才会被清除掉。
有幸的是在网络上终于找到可以捕获用户使用Alt+F4、标题栏按右键关闭、双击标题栏、直接按关闭按钮的事件的方法。当然对于最小化到任务栏再进行关闭是不能捕获的。
<script language="javascript">
<!--
function window.onunload(){
if((window.screenLeft>=10000 && window.screenTop>=10000)||event.altKey)
{
//用户非正常关闭时需要触发的动作
}
}
-->
</script>
说明:
window.screenLeft = 10000 + 边框宽 (2×2) = 10004
window.screenTop = 10000 + 工具栏高 + 标题栏高 = 10097
需要说明的,在onBeforeUnload中屏幕这些坐标属性都是正常数值。
screenLeft:获取浏览器客户区左上角相对于屏幕左上角的 x 坐标。
screenTop:获取浏览器客户区左上角相对于屏幕左上角的 y 坐标。
我猜测,在窗体销毁时捕获的将产生一个特殊的数值。在正常情况下的点击测试,数值都不会超过该数值。
现在问题是,在onBeforeUnload中使用window.location可以正常地提交请求到指定URL,但在onUnload事件中该方法不能有效执行。解决的方法是新开一个窗口,在将之关闭掉。
我们可以写上这样的话,来代替以往使用的,一系列的window.location。因为门户网站涉及到多个跨服务器的网站服务器。在统一入口退出后,需要依次地进行顺序退出,才能达到门户网站期望的效果。
var newWindow;
window.opener=null;
newWindow=window.open(URL,PageName, 'height=0,width=0’);
newWindow.opener=null;
newWindow.close();
……
该段代码已经经过测试,在onUnload里不要使用window.close,因为对象销毁前会立即触发该事件。而onBeforeUnload是页面将要被卸载前触发的事件。
而所谓的清除实质上就是把做好退出功能的页面,直接以打开新窗口方式的调用。可能在调用到关闭的时候能停顿一两秒,或者关闭窗口放在专门的退出页面。该页面与正常退出又切回到首页,不同的是退出后会自动进行关闭,不需要再另外进行控制直接打开即可。
[注意]在window.onUnload中如果不加判断,则会在刷新页面等导致当前页面变化都会触发该事件。因此必须要进行判断,捕捉特定的操作,才能屏蔽掉一些正常的操作。
续:在IE中如何在用户直接关闭窗口前清除Session
昨天曾经讲解了实现思路,但在实际操作中发现,必须要加上延迟才能确保程序可以正常执行完毕。下面附上实现的细节,并附上简单的时间延迟函数。代码已经经过测试。
<script language="javascript">
function window.onUnload()
{
var newWindow;
if((window.screenLeft>=10000 && window.screenTop>=10000)||event.altKey)
{
newWindow=window.open(‘退出程序地址’,’网页名称’,
’width=0,height=0,top=4000,left=4000');//新窗口将在视区之外打开
newWindow.opener=null;
sleep(5000);
newWindow.close();//新窗口关闭
}
}
function sleep(milisecond)
{
var currentDate,beginDate=new Date();
var beginHour,beginMinute,beginSecond,beginMs;
var hourGaps,minuteGaps,secondGaps,msGaps,gaps;
beginHour=beginDate.getHours();
beginMinute=beginDate.getMinutes();
beginSecond=beginDate.getSeconds();
beginMs=beginDate.getMilliseconds();
do
{
currentDate=new Date();
hourGaps=currentDate.getHours() - beginHour;
minuteGaps=currentDate.getMinutes() - beginMinute;
secondGaps=currentDate.getSeconds() - beginSecond;
msGaps=currentDate.getMilliseconds() - beginMs;
if(hourGaps<0) hourGaps+=24; //考虑进时进分进秒的特殊情况
gaps=hourGaps*3600+ minuteGaps*60+ secondGaps;
gaps=gaps*1000+msGaps;
}while(gaps<milisecond);
}
</script>
原文地址:http://wenson.iteye.com/blog/123407
分享到:
相关推荐
本文将详细介绍如何在用户关闭IE窗口时主动清除Session。 首先,我们可以利用JavaScript的`window.onunload`事件来监听窗口关闭的动作。这个事件会在用户关闭窗口或者离开页面时触发。示例代码如下: ```...
Session在ASP.NET中是一种非常重要的机制,用于在用户的不同请求之间存储和检索数据。它允许开发者在用户会话期间跟踪用户的状态,而无需在客户端使用cookies或其他技术。以下是对ASP.NET Session的七个关键认识: ...
Session Cookies 是临时的,仅存在于用户浏览会话期间,而 Persistent Cookies 则可以长期保存在客户端的硬盘上。 Cookie 的类型 ------------- 根据 Cookie 的生命周期和存储位置,Cookies 可以分为以下几种: 1...
- 在弹出的窗口中找到需要清除的网络凭据,并进行删除。 3. **使用`net session \\计算机名 /delete`命令**:这个命令用于清除与指定计算机之间的会话。 - 在命令提示符中输入`net session \\计算机名 /delete`...
- 打开“开始”菜单,点击“运行”(或者在搜索框中直接输入),键入“control userpasswords2”或者“control keymgr.dll”,然后按Enter键。 - 在打开的窗口中,转到“高级”选项卡,接着点击“管理密码”。 - ...
某些版本的IE可能不会正确处理或清除cookie,导致用户在新窗口或新标签页中重新登录。开发者需要对IE进行特殊处理,确保在不同窗口中能正确处理已登录状态。 综上所述,解决Web程序多台机器重复登录问题需要从会话...
Session Storage仅在当前浏览器窗口或Tab内有效,当窗口关闭时数据会被清除;而Local Storage的数据则可以长期保存,即使浏览器关闭再打开,数据依然存在。 5. **Service Worker**:在现代浏览器中,Service Worker...
在 UniGui 中,我们可以使用 UniGui 提供的函数来给每一个在线用户建立一套变量,并在用户断开后立即清除这些变量。 14. TuniHiddenPanel 的作用 TuniHiddenPanel 是 UniGui 中的一个控件,它可以隐藏控件,并将...
#### 1.2 关闭无关的IE窗口 确保在开始录制前关闭所有已经打开的IE浏览器窗口。这一步骤非常重要,因为如果存在多个浏览器窗口,可能会影响QTP识别正确的浏览器窗口进行录制。 #### 1.3 清除桌面干扰 关闭所有与...
一旦会话结束,比如用户关闭了浏览器窗口,sessionStorage中存储的所有数据将会被自动清除。因此,sessionStorage并不适合用于持久化存储,只适用于临时保存页面状态或用户在会话期间的数据。 2. localStorage:与...
怎样给每一个在线用户建立一套变量,在用户断开后立即清除 为每个在线用户建立变量并在断开连接时清除的方法: - **使用Session**:利用Session机制为每个用户提供独立的数据存储空间。 - **监听Session**:监听...
具体来说,一旦窗口、标签页或浏览器被关闭,存储在sessionStorage中的数据就会被自动清除。 sessionStorage的操作函数与localStorage相同: - `sessionStorage.setItem(key, value)`:向sessionStorage中添加数据...
- **Session销毁**:通过监听Session的结束事件,在用户断开连接时清除其对应的变量。 #### 17. TUniHiddenPanel的作用 `TUniHiddenPanel`是一种不可见的容器控件,常用于存放后台运行的组件,这些组件可能不直接...
5. **ResultSet接口**:在Java中,ResultSet接口用于处理SQL查询结果,其方法包括next()用于移动到下一行,close()用于关闭结果集,而back()和forward()不是ResultSet的标准方法。 6. **Web应用程序中的数据共享**...
每个在线用户可以对应一个会话(Session),利用Session存储用户的特定变量,当用户断开连接时,Session自然失效,变量会被清除。 16. **TUniHiddenPanel的作用** TUniHiddenPanel常用来隐藏某些组件,如在加载或...
当用户关闭浏览器窗口或标签页后,存储的数据会被清除。 **localStorage**:提供了持久化的本地存储方案,除非手动删除,否则存储的数据不会过期。 **特点**: 1. **大容量存储**:相较于Cookie的4KB大小限制,...
1. **开启“讲述人”功能**:在“运行”对话框中输入`narrator`并确认,即可调用“讲述人”功能,这是一个用于辅助视障用户的朗读屏幕文本的功能。 2. **设置语音键盘**:通过开启“讲述人”功能,输入的每个字符...
这两个事件可以帮助开发者在用户离开页面前执行某些操作,如保存数据、提醒用户确认离开或者清理资源。 ### `onbeforeunload`事件 `onbeforeunload`事件在页面即将被卸载(刷新或关闭)时触发,它提供了一个机会让...