怎么在关闭浏览器的时候触发Session_End事件?

hky162 2009-05-02 08:34:57
Session_End中的代码,是不是Session在还没有过期的时候,而计算机非正常关闭的情况下就不会执行了?
我要在网站上面显示在线的会员,也就是登录的会员都列出来,我的方法是在User表中有个字段是表示在线状态的,如abc吧,登录的时候对应会员的abc值为1,表示在线,而退出登录的时候要把abc的值置为0,表示不在线,但一般很多人是不会点退出登录按钮离开的,而是直接关闭浏览器,所以问题就来了,如果是直接关闭浏览器,那就只能在Session_End事件中,处理abc的值使其为0,可是有些时候,由于Session还没有过期,所以还没有触发Session_End,而计算机又关了,所以就会出现那个登录会员一直为1的情况
要是出现这种情况,有没有好点的办法解决?大家发表下自己的看法
...全文
966 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanren191919 2012-08-17
  • 打赏
  • 举报
回复
求解啊
情话 2012-04-12
  • 打赏
  • 举报
回复
本人是刚学习的菜鸟,求解啊!!!
liveviva7 2010-12-17
  • 打赏
  • 举报
回复
楼主,我也遇到了和你一样的问题,现在你解决了吗?求解答
keaiduo123 2009-06-02
  • 打赏
  • 举报
回复
关注下,正需要看看
  • 打赏
  • 举报
回复
关闭浏览器窗口跟Session_End根本无关。

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

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

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

通常我们应该去保护系统原本的机制,而不是硬要改变它。Session_End是Session过期的事后触发的,那么你跟Session过期无关的需求,例如你需要及时直到客户端有没有在线,明知这个不能实现你的需求,就不要非要宁可去改变系统原本的机制也是硬要使用它来实现。那种思路需要及时放弃。
tingbing 2009-06-02
  • 打赏
  • 举报
回复
先做个按钮,按钮的事件中写Session_end, 在网页的 upload中写按钮提交就可以了.
caofan520 2009-06-02
  • 打赏
  • 举报
回复
js捕获 unload事件写个ajax请求服务器

服务器执行 Session.Abandon();就可以了
peng_weida 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 namhyuk 的回复:]
记得asp.net的Membership可以根据web.config里的某项时间设置来自动管理用户是否在线的。它的后台数据库表里也专门有这么个字段。

不过一直没研究它后台具体是怎么动作的。
[/Quote]
恩,你用.NET的用户登陆模块,用户在线问题可以很好的解决
peng_weida 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 namhyuk 的回复:]
记得asp.net的Membership可以根据web.config里的某项时间设置来自动管理用户是否在线的。它的后台数据库表里也专门有这么个字段。

不过一直没研究它后台具体是怎么动作的。
[/Quote]
恩,你用.NET的用户登陆模块,用户在线问题可以很好的解决
tlzjff 2009-06-02
  • 打赏
  • 举报
回复
貌似只能自己做个心跳了~
wocaobaby 2009-06-02
  • 打赏
  • 举报
回复
我这几天也在想这个 因为有一个朋友他们要做一个在线聊天的 也用了session
我的想法是这样的 用一个timer控制每1秒去刷新一下显示聊天这块的textbox 这样session一直在刷
在把session 的timeout设置为1分钟
如果那个人把ie关了 1分钟以后session也就过期了 在seesion end方法里把数据里的字段设置为下线就可以了
热学沸腾56 2009-05-10
  • 打赏
  • 举报
回复
学习...up
hky162 2009-05-10
  • 打赏
  • 举报
回复
谢谢大家的帮助,但我是菜鸟,希望大家能给点具体的思路(包括部分代码),或者博客文章的链接,谢了啊
zhaoqiliang527 2009-05-03
  • 打赏
  • 举报
回复
关注!
cs78799662 2009-05-03
  • 打赏
  • 举报
回复
顶上
namhyuk 2009-05-03
  • 打赏
  • 举报
回复
记得asp.net的Membership可以根据web.config里的某项时间设置来自动管理用户是否在线的。它的后台数据库表里也专门有这么个字段。

不过一直没研究它后台具体是怎么动作的。
大聪 2009-05-03
  • 打赏
  • 举报
回复
javascrip中有个upload事件可以使用
amandag 2009-05-03
  • 打赏
  • 举报
回复
楼主问过的这个问题有很多人以前已经问过,可以考虑客户端每隔某个时间间隔向服务器发出消息(可考虑用ajax),如果服务器在指定的时间未收到消息,则判断此用户离线
amandag 2009-05-03
  • 打赏
  • 举报
回复
如果是直接关闭浏览器,那就只能在Session_End事件中,处理abc的值使其为0
==
这个思路就有问题,关闭浏览器是客户端的事件,无法触发Session_End事件,打个最简单的比方,我先把网线拔了,再关浏览器,服务器有可能得到通知吗?
likevs 2009-05-02
  • 打赏
  • 举报
回复
.NET里好像没有对程序员开放页面的关闭事件接口,不过,听说javascript这个语言可以捕捉到页面关闭事件,可以在这个事件中用Ajax技术来更新数据库表
加载更多回复(1)

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧