一、先把用户名存到session中,让后让application从session获取,用HttpSessionListener的destory()方法,当session销毁时,从application中移除该session的用户名!
二、Onbeforeunload也是在页面刷新或关闭时调用,Onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取;而onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。Onunload是无法阻止页面的更新和关闭的。而 Onbeforeunload 可以做到。曾经做一个考试系统,涉及到防止用户半途退出考试(有意或者无意),代码如下:
Java代码 收藏代码
<script type="text/javascript">
<!--
window.onbeforeunload = onbeforeunload_handler;
window.onunload = onunload_handler;
function onbeforeunload_handler(){
var warning="确认退出?";
return warning;
}
function onunload_handler(){
var warning="谢谢光临";
alert(warning);
}
// -->
</script>
三、有没有更好的办法啊,比如当用户登录的时候为用户创建一个标志性的对象,当用户退出的时候销毁这个对象,具体怎样实现。
有没有什么办法监听到用户退出系统时的动作。
四、即便是你写再多代码控制,就如你说,用户断电,客户端如何能够触发你的事件,我认为,这样只能在服务器端做文章,简单点做就是设置session 超时,麻烦点的话,应该服务器端监听客户端的响应事件,定时给客户端发送请求。
五、用AJXA,定时给后台发送段信息,当后台超过多少时间接受不到信息时,将session注销
B/S程序只能是客户端发送请求给服务端,服务端接受处理请求,只要你任意一个页面开着,这个Ajax就每隔1秒发送一个我还在浏览的信息到服务器,你关闭了窗口就不会发送了,这样即使你强行关闭浏览器,断电了,电脑被炸了,地震了。。。。服务器过了超过1秒时间没有收到你的确认消息就自动注销你的session就是了。
可以把登陆消息确认时间记在session中,写一个守护线程,每1秒检查一下session列表中,发现某一个超过时间没有确认就把他做了
六、思路是这样的:
用户登陆--->触发SESSIONLISTENER对象---->在SESSIONLISTENER对象先判断此SESSION的ID是否存在
判断分支:存在时,跳过不保存此SESSION对象,不存在时,保存此SESSION对象。
SESSIONLISTRNER运行结束---->过滤器运行并寻找SESSION是否是新创建的
判断分支:不是新的,进入APPLICATION域中根据SESSION的ID从APPLICATION域中的MAP中找到对应的SESSION,并判断是否存在用户信息
判断分支:如果用户存在,则跳过,如果用户为空,则跳转到登陆页面,或是对相应页面的功能不能使用。
如果过滤器寻找的SESSION是新创建的,那证明用户又新打开了一个窗口,那么就根据原始的SESSION的ID从MAP中获取相应的用户信息,并把用户信息保存到现在的SESSION中,供现在的新窗口使用。
过滤器执行完毕---->执行框架或是JS,JSP页面-->完.
这样做能保证用户信息都是统一的,并且在用户关闭某一窗口,或者是停电等原因时,SESSIONLISTENER都能在第一时间销毁SESSION,如果用户重复登陆,我们只要判断SESSION中是否存在已有的ID,那么就能对重复登陆的用户进行阻挡或拒绝。
二、Onbeforeunload也是在页面刷新或关闭时调用,Onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取;而onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。Onunload是无法阻止页面的更新和关闭的。而 Onbeforeunload 可以做到。曾经做一个考试系统,涉及到防止用户半途退出考试(有意或者无意),代码如下:
Java代码 收藏代码
<script type="text/javascript">
<!--
window.onbeforeunload = onbeforeunload_handler;
window.onunload = onunload_handler;
function onbeforeunload_handler(){
var warning="确认退出?";
return warning;
}
function onunload_handler(){
var warning="谢谢光临";
alert(warning);
}
// -->
</script>
三、有没有更好的办法啊,比如当用户登录的时候为用户创建一个标志性的对象,当用户退出的时候销毁这个对象,具体怎样实现。
有没有什么办法监听到用户退出系统时的动作。
四、即便是你写再多代码控制,就如你说,用户断电,客户端如何能够触发你的事件,我认为,这样只能在服务器端做文章,简单点做就是设置session 超时,麻烦点的话,应该服务器端监听客户端的响应事件,定时给客户端发送请求。
五、用AJXA,定时给后台发送段信息,当后台超过多少时间接受不到信息时,将session注销
B/S程序只能是客户端发送请求给服务端,服务端接受处理请求,只要你任意一个页面开着,这个Ajax就每隔1秒发送一个我还在浏览的信息到服务器,你关闭了窗口就不会发送了,这样即使你强行关闭浏览器,断电了,电脑被炸了,地震了。。。。服务器过了超过1秒时间没有收到你的确认消息就自动注销你的session就是了。
可以把登陆消息确认时间记在session中,写一个守护线程,每1秒检查一下session列表中,发现某一个超过时间没有确认就把他做了
六、思路是这样的:
用户登陆--->触发SESSIONLISTENER对象---->在SESSIONLISTENER对象先判断此SESSION的ID是否存在
判断分支:存在时,跳过不保存此SESSION对象,不存在时,保存此SESSION对象。
SESSIONLISTRNER运行结束---->过滤器运行并寻找SESSION是否是新创建的
判断分支:不是新的,进入APPLICATION域中根据SESSION的ID从APPLICATION域中的MAP中找到对应的SESSION,并判断是否存在用户信息
判断分支:如果用户存在,则跳过,如果用户为空,则跳转到登陆页面,或是对相应页面的功能不能使用。
如果过滤器寻找的SESSION是新创建的,那证明用户又新打开了一个窗口,那么就根据原始的SESSION的ID从MAP中获取相应的用户信息,并把用户信息保存到现在的SESSION中,供现在的新窗口使用。
过滤器执行完毕---->执行框架或是JS,JSP页面-->完.
这样做能保证用户信息都是统一的,并且在用户关闭某一窗口,或者是停电等原因时,SESSIONLISTENER都能在第一时间销毁SESSION,如果用户重复登陆,我们只要判断SESSION中是否存在已有的ID,那么就能对重复登陆的用户进行阻挡或拒绝。