`
wenson
  • 浏览: 1051965 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在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>
分享到:
评论

相关推荐

    关闭ie窗口清除Session的解决方法

    本文将详细介绍如何在用户关闭IE窗口时主动清除Session。 首先,我们可以利用JavaScript的`window.onunload`事件来监听窗口关闭的动作。这个事件会在用户关闭窗口或者离开页面时触发。示例代码如下: ```...

    Session浅析

    Session在ASP.NET中是一种非常重要的机制,用于在用户的不同请求之间存储和检索数据。它允许开发者在用户会话期间跟踪用户的状态,而无需在客户端使用cookies或其他技术。以下是对ASP.NET Session的七个关键认识: ...

    电脑中的cookies怎么删除 彻底清除上网痕迹方法【步骤】.docx

    Session Cookies 是临时的,仅存在于用户浏览会话期间,而 Persistent Cookies 则可以长期保存在客户端的硬盘上。 Cookie 的类型 ------------- 根据 Cookie 的生命周期和存储位置,Cookies 可以分为以下几种: 1...

    清除局域网访问密码.txt

    - 在弹出的窗口中找到需要清除的网络凭据,并进行删除。 3. **使用`net session \\计算机名 /delete`命令**:这个命令用于清除与指定计算机之间的会话。 - 在命令提示符中输入`net session \\计算机名 /delete`...

    IE浏览器修复步骤

    - 打开“开始”菜单,点击“运行”(或者在搜索框中直接输入),键入“control userpasswords2”或者“control keymgr.dll”,然后按Enter键。 - 在打开的窗口中,转到“高级”选项卡,接着点击“管理密码”。 - ...

    Web应用程重复登录问题

    某些版本的IE可能不会正确处理或清除cookie,导致用户在新窗口或新标签页中重新登录。开发者需要对IE进行特殊处理,确保在不同窗口中能正确处理已登录状态。 综上所述,解决Web程序多台机器重复登录问题需要从会话...

    浏览器页面-暂存.zip

    Session Storage仅在当前浏览器窗口或Tab内有效,当窗口关闭时数据会被清除;而Local Storage的数据则可以长期保存,即使浏览器关闭再打开,数据依然存在。 5. **Service Worker**:在现代浏览器中,Service Worker...

    UniGui学习笔记

    在 UniGui 中,我们可以使用 UniGui 提供的函数来给每一个在线用户建立一套变量,并在用户断开后立即清除这些变量。 14. TuniHiddenPanel 的作用 TuniHiddenPanel 是 UniGui 中的一个控件,它可以隐藏控件,并将...

    VCTE_L207_QTP_Theory02_v1[1].0

    #### 1.2 关闭无关的IE窗口 确保在开始录制前关闭所有已经打开的IE浏览器窗口。这一步骤非常重要,因为如果存在多个浏览器窗口,可能会影响QTP识别正确的浏览器窗口进行录制。 #### 1.3 清除桌面干扰 关闭所有与...

    html5中的Web Storage

    一旦会话结束,比如用户关闭了浏览器窗口,sessionStorage中存储的所有数据将会被自动清除。因此,sessionStorage并不适合用于持久化存储,只适用于临时保存页面状态或用户在会话期间的数据。 2. localStorage:与...

    UniGUI集合说明--追月无名.pdf

    怎样给每一个在线用户建立一套变量,在用户断开后立即清除 为每个在线用户建立变量并在断开连接时清除的方法: - **使用Session**:利用Session机制为每个用户提供独立的数据存储空间。 - **监听Session**:监听...

    localStorage,sessionStorage的使用

    具体来说,一旦窗口、标签页或浏览器被关闭,存储在sessionStorage中的数据就会被自动清除。 sessionStorage的操作函数与localStorage相同: - `sessionStorage.setItem(key, value)`:向sessionStorage中添加数据...

    UniGUI集合说明

    - **Session销毁**:通过监听Session的结束事件,在用户断开连接时清除其对应的变量。 #### 17. TUniHiddenPanel的作用 `TUniHiddenPanel`是一种不可见的容器控件,常用于存放后台运行的组件,这些组件可能不直接...

    2021-2022计算机二级等级考试试题及答案No.12258.docx

    5. **ResultSet接口**:在Java中,ResultSet接口用于处理SQL查询结果,其方法包括next()用于移动到下一行,close()用于关闭结果集,而back()和forward()不是ResultSet的标准方法。 6. **Web应用程序中的数据共享**...

    delphi用UniGUI开发Web集合说明---追月无名.doc

    每个在线用户可以对应一个会话(Session),利用Session存储用户的特定变量,当用户断开连接时,Session自然失效,变量会被清除。 16. **TUniHiddenPanel的作用** TUniHiddenPanel常用来隐藏某些组件,如在加载或...

    优知学院-JS面试题目合集77.pdf

    当用户关闭浏览器窗口或标签页后,存储的数据会被清除。 **localStorage**:提供了持久化的本地存储方案,除非手动删除,否则存储的数据不会过期。 **特点**: 1. **大容量存储**:相较于Cookie的4KB大小限制,...

    人人都应该掌握的一些电脑操作技巧

    1. **开启“讲述人”功能**:在“运行”对话框中输入`narrator`并确认,即可调用“讲述人”功能,这是一个用于辅助视障用户的朗读屏幕文本的功能。 2. **设置语音键盘**:通过开启“讲述人”功能,输入的每个字符...

    javascript监听页面刷新和页面关闭事件方法详解

    这两个事件可以帮助开发者在用户离开页面前执行某些操作,如保存数据、提醒用户确认离开或者清理资源。 ### `onbeforeunload`事件 `onbeforeunload`事件在页面即将被卸载(刷新或关闭)时触发,它提供了一个机会让...

Global site tag (gtag.js) - Google Analytics