近来正在解决一个单点登录的遗留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中 |
其实个人感觉只有这个后台,没有前台也能解决用户登录的问题。
相关推荐
"ie事件捕获控件"是一个专门针对Internet Explorer(IE)浏览器设计的技术解决方案,它允许开发者捕获并处理浏览器的各种事件,例如打开链接、加载页面、关闭窗口等。这种技术的核心在于事件模型,它是JavaScript和...
在实际项目中,你可能需要处理更多复杂情况,例如在多线程环境中调用浏览器、捕获浏览器打开的事件、或者关闭已打开的浏览器窗口。这时,可能需要结合其他技术,如Windows消息循环、进程和线程管理等。 最后,关于...
标题“捕捉IE关闭按钮事件”涉及到了JavaScript编程中的一个特定问题,即如何在用户点击Internet Explorer(IE)浏览器的关闭按钮时执行某些代码。这篇博客文章可能探讨了如何实现这一功能。 在JavaScript中,...
new_page_1.htm和index.htm是HTML文件,它们可能包含了实现这种效果的JavaScript代码和相关的HTML结构,用户可以通过这些文件了解具体的实现方式。 实现IE7标签效果的JavaScript方法通常包括以下几个步骤: 1. **...
开发者在使用IEWebControl时,可以通过编程接口(API)控制Web页面的行为,例如加载特定URL、执行JavaScript代码、捕获页面事件等。这在开发需要嵌入Web内容的复杂应用时非常有用,比如在线编辑器、邮件客户端或者...
总的来说,Vue.js提供了一种优雅的方式来处理窗口关闭和刷新事件,通过结合`window.onbeforeunload`事件和Vue的生命周期钩子,我们可以实现对用户离开页面时的控制,从而提升用户体验并保证数据的完整性。...
- 使用`@echo off`命令关闭命令行窗口的消息输出,使命令行界面更加整洁。 - 使用`del /f /s /q`命令删除指定路径下的所有文件,其中: - `/f`表示强制删除只读文件; - `/s`表示删除指定目录及其子目录下的所有...
以上代码中,`SendKeys.SendWait("%{F4}")`模拟了用户按下Alt+F4来关闭窗口。如果进程仍然无响应,我们将强制结束它。 4. 使用WinBrowser: 在你提供的文件"WinBrowser"中,可能是实现了一个用于浏览Web的WinForm...
在给定的“防IE8源码.zip_ie8_浏览器”项目中,我们可以看到一系列文件,这些文件是用C#语言编写的,用于实现一个模仿IE8浏览器功能和界面的WinForms应用。 首先,`Form1.Designer.cs`和`Form1.cs`是主要的用户界面...
在易语言中,这通常通过API函数如`SetWindowLong`和`SetWinEventHook`来设置窗口过程,以便在IE浏览器导航时捕获相关事件。 5. **易语言编程基础**:理解易语言的基本语法、变量声明、流程控制(如循环、条件判断)...
这个易语言IE查看器源码很可能是实现了一个简单的浏览器界面和功能,如打开网页、前进、后退、刷新等操作。 通过分析这个源码,我们可以学习到以下几点易语言编程的知识点: 1. **窗口程序设计**:易语言中,程序...
易语言提供了一些API函数和内置命令,可以用来操作注册表,从而实现对IE主页的更改。 1. **注册表操作**: - 易语言提供了`读注册表字符串`、`写注册表字符串`等命令,用于读取和写入注册表中的数据。在修改IE主页...
IE流量监测器通常通过监听网络接口(如TCP/IP协议栈)来捕获数据包,并解析这些数据以获取流量信息。它可以跟踪HTTP、HTTPS等常见协议的流量,甚至可能包括FTP、SMTP等其他网络协议。此外,为了确保用户的隐私,这些...
这通常通过调用Windows API(应用程序接口)实现,比如使用`SHGetActiveWindow`获取活动窗口句柄,然后使用`IWebBrowser2`接口来访问IE对象并获取地址。 4. **COM组件技术**:在易语言中,调用COM组件是常见的操作...
`showModalDialog` 是一个古老的浏览器API,用于创建模态对话框,它会阻塞页面的JavaScript执行,直到对话框关闭。由于 Selenium 的执行依赖于JavaScript,因此在模态对话框打开时,Selenium 无法与对话框交互,导致...
总的来说,这个例子展示了如何使用JavaScript和CSS结合来创建一个可拖动的弹出窗口,提供了一种交互性强且用户友好的界面设计方式。通过理解并应用这些技术,开发者可以在自己的网页应用中实现类似的动态效果。
该方法首先调用GetDefaultBrowserName方法获取默认浏览器的名称,然后通过Process.GetProcessesByName("IEXPLORE")获取所有名为“IEXPLORE”的进程,即所有打开的IE窗口。随后,遍历这些进程并调用Process的Kill方法...
IE浏览器的HTTP Analyzer是一个附加在IE浏览器,允许你 捕获的HTTP /实时HTTPS通信。 它可以跟踪和显示各种信息,包括标题,内容,... IE浏览器的HTTP分析器集成到您的IE浏览器窗口的下部,可打开/关闭IE的工具栏
本压缩包“易语言源码用IE下载文件.zip”显然包含了使用易语言实现通过Internet Explorer(IE)浏览器下载文件的源代码示例。下面我们将深入探讨易语言的基础知识,以及如何利用IE组件进行文件下载。 1. **易语言...
在这个案例中,当判断为用户要关闭窗口时,会发送一个POST请求到`LogOut.aspx`,以实现注销功能。`xmlhttp.open("POST", "LogOut.aspx", false);` 这行代码设置了请求类型为POST,目标URL为`LogOut.aspx`,第三个...