是这样的,我编了一个程序,有用到用户登陆,也就是用户名,密码。登陆成功后我就把数据库中表示该用户上线的字段设置为“1”表示上线,问题是要是该用户下线时,是点的浏览器右上角的那个小叉,我怎样编程才能该变数据库中的字段来表示该用户下线了。我曾经想过用在 bb.aspx中使用<body onunload ="window.open('aa.aspx')">
把修改数据库的部分写在aa.aspx中,但是我发现我在bb.aspx点击一个按钮跳转到另一个页面时也回执行window.open('aa.aspx')。请教,有什么方法能解决我在上面所说的下线问题。尽可能详细一点。

解决方案 »

  1.   

    在Global.asax.cs里面的
    protected void Session_End(Object sender, EventArgs e)
    里面写结束的东西
      

  2.   

    同意楼上登录成功后 在protected void Session_start(Object sender, EventArgs e) 中写改变数据库记录字段为1 的代码。在protected void Session_End(Object sender, EventArgs e) 中写 结束后改变的代码。 这样无论关不关闭,只要是Session 过期后都会改变状态。
      

  3.   

    我以前也想要实现这个功能  但是没有找到好的办法
      onunload 实时 但是就会出现你所说的问题
     goldentimecym(振荡波)的办法是可行的  但是会出现滞后的问题  也就是说用户虽然关闭了页面,但是其session 还得过一段时间才能过期,session的过期时间在web.config中可以设置,为了减少滞后的影响,可以将session的过期时间设置的短一下 但是不能太短,以免影响正常用户的使用
      期待高手出现!
      

  4.   

    不可能信赖客户端,一定要以Session超时作为判断,例如他家停电了掉线了也会通知你吗?但即使是Session超时也有局限性,就是Session_End事件只有在Session是InProc模式的时候才可用,否则是不会被触发的。。ASP.NET的Session真有够烂的。