我已经创建了处理用户登录的 Web 应用程序,并在用户从应用程序注销时更新注销时间,但是当用户直接关闭 Web 浏览器或系统因某些问题关闭时,我无法更新用户注销时间。
请给出任何possible way to update user logout time
关于这种情况的信息。
假设客户端的javascript是一个webapp。
在这种情况下,您应该在浏览器关闭事件中发送请求
window.onbeforeunload = function(event) {
//send request to server .
}
喜欢阅读:想要检测浏览器关闭事件?
可能以下步骤可以帮助您更新注销时间。
1.为每个请求不断更新会话中的时间戳变量。
2.在会话超时期间获取变量值(用户最后访问时保持)并在注销记录中更新。
这可以在不依赖浏览器发送注销请求的情况下提供帮助。
您可以创建一个实现HttpSessionListener
和注释的类,@WebListener()
如下所示:
@WebListener()
public class MyListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
Date lougOutDate=new java.util.Date();
}
}
在sessionDestroyed
您检索断开日期的方法中
试试这个代码来实现
window.onbeforeunload = function(event) {
var isOK = confirm("Are you sure to Leave this Page?");
if(isOK)
{
// try ajax for update your table
}
}
你为什么不使用 TimeOut ?
有几种解决方案:
http://en.wikipedia.org/wiki/HTTP_cookie
在您的特定情况下,它应该是 Session Cookie
会话 cookie 网站的用户会话 cookie[14](也称为内存 cookie 或临时 cookie)仅在用户阅读和浏览网站时存在于临时内存中。如果在 cookie 创建时未设置到期日期或有效期间隔,则会创建会话 cookie。当用户关闭浏览器时,Web 浏览器通常会删除会话 cookie。[15][16]
您可以尝试编写一些向服务器发送“用户注销”消息的 Javascript。$.unload()
应该使用(如果您使用 jQuery)或绑定到unload
浏览器的本机事件来触发此代码。
在这种情况下,无法准确获取注销时间,因为这可能是由于互联网连接丢失等原因造成的。
一些可能性:
在页面上使用带有 jquery 的 beforeunload 事件。
每当用户出于任何原因离开您的页面时,都会触发 beforeunload 事件。
例如,如果用户提交表单、单击链接、关闭窗口(或选项卡)或使用地址栏、搜索框或书签进入新页面,它将被触发。
您可以使用以下代码排除表单提交和超链接(其他框架除外):
var inFormOrLink = false;
$(document).on('click','a', function() { inFormOrLink = true; });
$(document).bind('submit','form', function() { inFormOrLink = true; });
$(window).on('beforeunload',document, function(eventObject) {
var returnValue = undefined;
if (inFormOrLink == false) {
//do your action
}
});
编辑:在这里找到答案:如何捕获浏览器窗口关闭事件?