日期:2014-05-18  浏览次数:20395 次

怎么在关闭浏览器的时候触发Session_End事件?
Session_End中的代码,是不是Session在还没有过期的时候,而计算机非正常关闭的情况下就不会执行了?
我要在网站上面显示在线的会员,也就是登录的会员都列出来,我的方法是在User表中有个字段是表示在线状态的,如abc吧,登录的时候对应会员的abc值为1,表示在线,而退出登录的时候要把abc的值置为0,表示不在线,但一般很多人是不会点退出登录按钮离开的,而是直接关闭浏览器,所以问题就来了,如果是直接关闭浏览器,那就只能在Session_End事件中,处理abc的值使其为0,可是有些时候,由于Session还没有过期,所以还没有触发Session_End,而计算机又关了,所以就会出现那个登录会员一直为1的情况
要是出现这种情况,有没有好点的办法解决?大家发表下自己的看法

------解决方案--------------------
关闭浏览器窗口跟Session_End根本无关。

asp.net触发Session_End,就是服务器端Session过期了。浏览器假设窗口关闭了,然后又打开了,例如我自己写一个程序来使用http协议向服务器发送消息,每一次Post消息时我都给服务器发送相同的asp.net标识的SessionID编号,那么服务器每一次都认这个会话。

服务器才不管你是什么客户端程序再发消息,客户端程序有没有窗口关闭概念跟服务器Session没有半点关系。

你可以学点http通讯概念,让你的老师带你花1小时时间试验一下客户端跟服务器通讯时的跟踪调试技术,可以避免多余地设计这种东西。

通常我们应该去保护系统原本的机制,而不是硬要改变它。Session_End是Session过期的事后触发的,那么你跟Session过期无关的需求,例如你需要及时直到客户端有没有在线,明知这个不能实现你的需求,就不要非要宁可去改变系统原本的机制也是硬要使用它来实现。那种思路需要及时放弃。