`
j2l_2010
  • 浏览: 840 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

捕获关闭IE窗口的实现方式

阅读更多

近来正在解决一个单点登录的遗留bug,用户反映的问题有两个:

1.在某页面长时间无操作,导致session过期,用户需要重新登录

2.关闭IE后session无法马上过期,导致用户无法继续登录

 

解决方案如下:

1. 对于第一个的解决方案是增加session的过期时间,目前是一小时.

2.第一个的解决方案导致第二个问题很严重,关闭IE后session不过期,用户长时间无法登录.在google,百度一大堆之后发现网上的方法没有效果.后来测试发现

event.clientX>document.body.clientWidth

这个条件有时候在关闭IE时是不成立的,现将该条件删除。

 

完整代码如下:

(function(){

window.onbeforeunload = function(){ 

if (event.clientY<0 || event.altKey){

var confirmResult = window.confirm("关闭页面后需要重新登录.确定关闭吗?");

if(confirmResult){

// 通知销毁session,保证用户登录能成功

}else{

return "请点击取消按钮";

}

}

 

})();

 

本想用项目里的confirm弹出框,但是无法阻塞关闭IE的线程,IE仍然会关闭,所以只好用IE自带的confirm弹窗来处理:

点击"确定",通知后台销毁session,流程结束;

点击“取消”,这时会弹出IE关闭的提示框,也有“确定”和“取消”两个按钮,不过这两个按钮的点击事件无法获取。再点击“取消”,提示框消失,流程结束;如果点“确定”,浏览器关闭,但是没有通知后台销毁session,如果此时session还没有过期,用户仍然无法登录。看来前台是没有更好的办法,只能后台解决。

 

后台解决方案:

目前系统对于用户会保存在两个地方:session和一个静态的Map<userId, user>中。

新建一个Map<userId, HttpSession>用来存用户和sessoin的对应关系。下面这个表格应该能说明问题:

 

Session UserMap 处理结果
存在用户 不存在登录用户

销毁session,SessionMap删除相应的session,重新获取session,

user加入session和UserMap中,session加入SessionMap中,登录成功,进入首页

存在用户 存在登录用户 if(用户与登录用户 name 相同)     相同session,不作处理
if(用户与登录用户 name 不相同) 不同session,已在别处登录
不存在用户 不存在登录用户 登录用户加入session和UserMap中,session加入SessionMap中,登录成功,进入首页
不存在用户 存在登录用户

从SessionMap获取旧session后,销毁且从SessionMap中删除,

登录用户加入新session和UserMap中,新session加入SessionMap中

 

其实个人感觉只有这个后台,没有前台也能解决用户登录的问题。

0
11
分享到:
评论

相关推荐

    ie事件捕获控件 捕获ie浏览器到打开链接等等的事件

    "ie事件捕获控件"是一个专门针对Internet Explorer(IE)浏览器设计的技术解决方案,它允许开发者捕获并处理浏览器的各种事件,例如打开链接、加载页面、关闭窗口等。这种技术的核心在于事件模型,它是JavaScript和...

    Delphi程序调用IE打开浏览器窗口的源程序..rar

    在实际项目中,你可能需要处理更多复杂情况,例如在多线程环境中调用浏览器、捕获浏览器打开的事件、或者关闭已打开的浏览器窗口。这时,可能需要结合其他技术,如Windows消息循环、进程和线程管理等。 最后,关于...

    捕捉IE关闭按钮事件

    标题“捕捉IE关闭按钮事件”涉及到了JavaScript编程中的一个特定问题,即如何在用户点击Internet Explorer(IE)浏览器的关闭按钮时执行某些代码。这篇博客文章可能探讨了如何实现这一功能。 在JavaScript中,...

    IE7标签效果javascript

    new_page_1.htm和index.htm是HTML文件,它们可能包含了实现这种效果的JavaScript代码和相关的HTML结构,用户可以通过这些文件了解具体的实现方式。 实现IE7标签效果的JavaScript方法通常包括以下几个步骤: 1. **...

    IEWebControl.exe

    开发者在使用IEWebControl时,可以通过编程接口(API)控制Web页面的行为,例如加载特定URL、执行JavaScript代码、捕获页面事件等。这在开发需要嵌入Web内容的复杂应用时非常有用,比如在线编辑器、邮件客户端或者...

    vuejs中监听窗口关闭和窗口刷新事件的方法

    总的来说,Vue.js提供了一种优雅的方式来处理窗口关闭和刷新事件,通过结合`window.onbeforeunload`事件和Vue的生命周期钩子,我们可以实现对用户离开页面时的控制,从而提升用户体验并保证数据的完整性。...

    C# 清理 IE 缓存文件.txt

    - 使用`@echo off`命令关闭命令行窗口的消息输出,使命令行界面更加整洁。 - 使用`del /f /s /q`命令删除指定路径下的所有文件,其中: - `/f`表示强制删除只读文件; - `/s`表示删除指定目录及其子目录下的所有...

    C# winform 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件)

    以上代码中,`SendKeys.SendWait("%{F4}")`模拟了用户按下Alt+F4来关闭窗口。如果进程仍然无响应,我们将强制结束它。 4. 使用WinBrowser: 在你提供的文件"WinBrowser"中,可能是实现了一个用于浏览Web的WinForm...

    防IE8源码.zip_ie8_浏览器

    在给定的“防IE8源码.zip_ie8_浏览器”项目中,我们可以看到一系列文件,这些文件是用C#语言编写的,用于实现一个模仿IE8浏览器功能和界面的WinForms应用。 首先,`Form1.Designer.cs`和`Form1.cs`是主要的用户界面...

    易语言源码记录IE地址.rar

    在易语言中,这通常通过API函数如`SetWindowLong`和`SetWinEventHook`来设置窗口过程,以便在IE浏览器导航时捕获相关事件。 5. **易语言编程基础**:理解易语言的基本语法、变量声明、流程控制(如循环、条件判断)...

    易语言源码易语言IE查看器源码.rar

    这个易语言IE查看器源码很可能是实现了一个简单的浏览器界面和功能,如打开网页、前进、后退、刷新等操作。 通过分析这个源码,我们可以学习到以下几点易语言编程的知识点: 1. **窗口程序设计**:易语言中,程序...

    易语言修改IE主页

    易语言提供了一些API函数和内置命令,可以用来操作注册表,从而实现对IE主页的更改。 1. **注册表操作**: - 易语言提供了`读注册表字符串`、`写注册表字符串`等命令,用于读取和写入注册表中的数据。在修改IE主页...

    IE流量监测器 用于检测IE在网络中的流量

    IE流量监测器通常通过监听网络接口(如TCP/IP协议栈)来捕获数据包,并解析这些数据以获取流量信息。它可以跟踪HTTP、HTTPS等常见协议的流量,甚至可能包括FTP、SMTP等其他网络协议。此外,为了确保用户的隐私,这些...

    取IE地址栏.zip易语言程序源码资源下载

    这通常通过调用Windows API(应用程序接口)实现,比如使用`SHGetActiveWindow`获取活动窗口句柄,然后使用`IWebBrowser2`接口来访问IE对象并获取地址。 4. **COM组件技术**:在易语言中,调用COM组件是常见的操作...

    使用selenium测试showModalDialog模态对话框

    `showModalDialog` 是一个古老的浏览器API,用于创建模态对话框,它会阻塞页面的JavaScript执行,直到对话框关闭。由于 Selenium 的执行依赖于JavaScript,因此在模态对话框打开时,Selenium 无法与对话框交互,导致...

    javascript弹出拖动窗口

    总的来说,这个例子展示了如何使用JavaScript和CSS结合来创建一个可拖动的弹出窗口,提供了一种交互性强且用户友好的界面设计方式。通过理解并应用这些技术,开发者可以在自己的网页应用中实现类似的动态效果。

    C#控制IE进程关闭和缓存清理的实现代码

    该方法首先调用GetDefaultBrowserName方法获取默认浏览器的名称,然后通过Process.GetProcessesByName("IEXPLORE")获取所有名为“IEXPLORE”的进程,即所有打开的IE窗口。随后,遍历这些进程并调用Process的Kill方法...

    IEHttpAnalyzerV2

    IE浏览器的HTTP Analyzer是一个附加在IE浏览器,允许你 捕获的HTTP /实时HTTPS通信。 它可以跟踪和显示各种信息,包括标题,内容,... IE浏览器的HTTP分析器集成到您的IE浏览器窗口的下部,可打开/关闭IE的工具栏

    易语言源码用IE下载文件.zip

    本压缩包“易语言源码用IE下载文件.zip”显然包含了使用易语言实现通过Internet Explorer(IE)浏览器下载文件的源代码示例。下面我们将深入探讨易语言的基础知识,以及如何利用IE组件进行文件下载。 1. **易语言...

    IE关闭时判断及AJAX注销案例学习

    在这个案例中,当判断为用户要关闭窗口时,会发送一个POST请求到`LogOut.aspx`,以实现注销功能。`xmlhttp.open("POST", "LogOut.aspx", false);` 这行代码设置了请求类型为POST,目标URL为`LogOut.aspx`,第三个...

Global site tag (gtag.js) - Google Analytics