浏览器异常关闭或关闭选项卡后怎么清除该登录用户信息

现在我的系统可以实现阻止同一用户在不同浏览器上的登录,允许不同用户在同一浏览器上的登录,可一旦不是正常退出,直接关闭选项卡或直接关闭浏览器的话,用户不能在重新登录了,求教.

增加onbeforeunload事件,用同步的ajax发送请求注销登录验证的session,注意ajax要同步,不能异步。浏览器奔溃的话无解。

 window.onbeforeunload=function(){
//....ajax代码同步发送请求注销
}

判断用户的在线状态

获得用户登陆状态不用说了,判断离开的话就有一点问题了,如果说用户都是按照设计者的规定触发退出事件离开的话那就没什么难度了,但是用户的离开方式多种多样,怎么在用户非法离开的时候即时的判断离开呢?最常见的非法离开就是关闭浏览器了。
复制代码代码如下:

window.onbeforeunload = function() {
if (window.event.clientX>document.body.clientWidth&&event.clientY<0||event.altKey)
{
alert("浏览器关闭");
}
else
{
alert("刷新或者跳转到其他页");
}
}


以上是一个片段,BODY 的 UNLOAD和onbeforeunload事件会在浏览器清除所加载的信息时被触发,也就是说页面在回送、重定向或被关闭的时候就会触发 ,通过这个事件加上JAVASCRIPT处理就可以实现非法关闭浏览器也即时统计在线人数了。
但是有个问题,怎么判断用户是关闭还是刷新、回送、重定向呢?
window.event.clientX和window.event.clientY 将捕捉当前事件发生时鼠标相对与窗口的桌面坐标,通常情况下IE的关闭按钮都会在页面的右上部分,所以点关闭的时候鼠标的坐标的Y坐标一定是小于0的,另外,鼠标坐标的X方向上坐标数值会大于窗体宽度,所以,从这两个条件就可以判断鼠标是不是在点关闭按钮引发的onbeforeload事件。
还有一种关闭方法是ALT+F4 ,通过event.altKey就可以判断,事件发生的时候ALT键是不是被按下了,这样也就判断出了是不是时候ALT+F4来关闭窗口。
不过也出现一个问题,当使用一些特殊的左面主题的时候 关闭按钮可触发的坐标数值不一定小于窗体宽度,所以,上面例子中的window.event.clientX>document.body.clientWidth这个条件可以不要.

浏览器都崩溃了,可能根本就没有时间去执行beforeunload,unload之类的事件。可以在服务器端通过SessionID来控制只有一个用户在线,如果已经在线,怎把前一个踢掉 (当前你也可以提示用户已经在线,如果这样的话, 最好设置过期时间,否则浏览器奔溃,后面就会因为已经登陆了而不能在登陆了。)
参考一个账号不允许多个用户同时在线,重复登陆

可参考以下链接

http://www.shangxueba.com/jingyan/1907011.html