如何B/S架构中客户端关闭浏览器窗口,自动注销服务端的用户登陆状态?
有一个B/S模式的系统,在服务器端需要得到该用户的登陆状态和信息,但是当客户端的浏览器最后一个窗口被关闭的时候,把服务器端的用户登陆状态注销掉~~~
我自己的想法感觉太复杂了~~ 所有来这里求大牛们帮帮忙~~谢谢~~~
关键在于怎么判断客户端关闭了最后一个浏览器窗口,然后通知服务器端:“我这边已经关闭窗口了!”
麻烦请提出具体解决方案和具体的实施细节之类的。高分献上。
comment长连接方式太耗资源,不太可取。
用 doUnload 试试,看看下面的讨论
http://codingforums.com/showthread.php?t=37279
如果不行,可以考虑用 AJAX 定时通过 web service 和服务器通讯一下,服务器检测这个心跳消息,如果超时,就认为退出了。
用户登录后,信息是保存到session里面。而session是存储到服务器端的数据。每个浏览器会分配不同的sessionid,因此浏览器管理session都是根据sessionid来的。因此可以设置sessionid。
客户端关闭了最后一个浏览器窗口,浏览器应该会把sessionid清除。当客户端再次向服务器端发出请求的时候,同时会把sessionid传过去,如果sessionid清除了,服务器端就会知道了。
再怎么搞,也无法判断关了电脑情况吧。
ASP中有个Global.asax里面有个
void Session_End(object sender, EventArgs e)
{
//在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式
//设置为 StateServer 或 SQLServer,则不会引发该事件。
}
使用 js 的setInterval函数 和ajax 更新用户最后在线时间