判断用户什么时候离开,以什么方式离开

转载 2006年06月21日 14:29:00

站点用户统计是每一个站点比有得功能,但是很少有人实现在线用户统计得绝对精确或者说是相对精确,基于Web得原理,服务器不会主动知道用户通过关闭浏览器离开站点,这时候只能依靠服务器端变量Session得过期来判断用户是否离开,但用户浏览器是可以知道自己何时关闭得,代码也非常简单

如下:

function body_onunload()

{

   if(window.event.clientX<0)

   {

          alert('the broswer is closing...');

   }

    else

    {

         alert('the user is refreshing or navigating away...);

    }
}

以上代码就会判断用户是关闭浏览器还是刷新或者导航到其他页面了!


---------------------------------------------------------------------------------------------------
下午的时候,用代码测试了一下,主要是利用上面的js函数,结合ajax技术,由于对ajax技术了解的不是很透彻,前后尝试了三次。
现将尝试结果与大家分享,大家也多给点意见
首先我尝试了在ajax方法中访问Application,企图用Application变量来记录在线人数。尝试代码:
[AjaxPro.AjaxMethod]
  public int Logoff()
  {   
       Application["onlineCount"]=Convert.ToInt32(Application["onlineCount"])-1;
      return      Convert.ToInt32(Application["onlineCount"]);
  }
尝试失败!估计是ajax不能访问应用程序的静态变量和Application变量。第一次使用AjaxPro不知道如何设置可以访问Session,以前使用的是ajax.dll,设置成可以读写Session,尝试结果可能发生改变!
第二种我尝试了用文本文件记录在线人数,仍然失败!
第三中,采用数据库!尝试成功。
代码如下:
[AjaxPro.AjaxMethod]
  public int Logoff()
  {   
   SqlConnection conn = new  SqlConnection("server=.;database=test; uid=sa;pwd=123");
   SqlCommand cmd = new SqlCommand("update OnlineCount set num=num-1",conn);
   try
   {
    conn.Open();
    cmd.ExecuteNonQuery();
   }
   catch(Exception ex)
   {
    EventLog.WriteEntry(ex.Source,ex.Message);
   }
   finally
   {
    conn.Close();
   }
   
   cmd = new SqlCommand("select top 1 num from OnlineCount",conn);
   try
   {
    conn.Open();
    return Convert.ToInt32(cmd.ExecuteScalar());
   }
   catch(Exception ex)
   {
    EventLog.WriteEntry(ex.Source,ex.Message);
   }
   finally
   {
    conn.Close();
   }
   return 0;
   
  }
前台页面缩

 1    <script language="javascript">
 2<!--
 3       function leave() 
 4       
 5          alert(window.event.clientX);
 6          if(window.event.clientX<0)
 7          {
 8            WebApplication3.WebForm1.Logoff().value;
 9          }

10       }

11//-->
12        
</script>
13    </HEAD>
14    <body onunload="leave()">

这样的话,在对安全行和及时性要求比较严格的情矿下,将一个页面设置为主页面,如果该页面关闭,表示用户已经退出。电子邮件系统就可以使用该方法。
     

http://jillzhang.cnblogs.com/archive/2006/04/12/373566.aspx

相关文章推荐

请解释一下为什么会出现浮动和什么时候需要清除浮动?清除浮动的方式?

为什么出现浮动?浮动float最开始出现的意义是为了让文字环绕图片而已,但人们发现,如果想要三个块级元素并排显示,都给它们加个float来得会比较方便。什么时候清除浮动? 如果想要实现三个块级元素并...
  • sjinsa
  • sjinsa
  • 2017年04月28日 18:25
  • 2861

mysql中index的如何使用,判断什么时候加索引

http://blog.csdn.net/hotdust/article/details/51525757  一、什么是索引?   索引用来快速地寻找那些具有特定值的记录,所有My...

mysql优化(一)判断什么时候加索引

from: http://ourmysql.com/archives/1073?f=wb 分析实施总结报告: 我的测试报告如下:(注意是我的)数据十几万条 采用zouql的索引优化...

Android 加载图片时根据哪个类获得的值,大致判断什么时候Out Of Memory

通过搜索我们肯定能找到很多关于Android内存的文章,但是我很疑惑的是到底是通过哪个函数获得的值到达了临界时,会出现 Out Of Memory 的错误。于是我测试了一番。 首先,我们要了解有哪些...

mysql中index的如何使用,判断什么时候加索引(强烈推荐)

from: http://ourmysql.com/archives/1073?f=wb 分析实施总结报告: 我的测试报告如下:(注意是我的)数据十几万条 采用zouql的索引优化后,每单...
  • hotdust
  • hotdust
  • 2016年05月28日 17:08
  • 10308

ajax与jq什么时候使用

  • 2017年10月19日 14:57
  • 838B
  • 下载

在Qt中如何判断鼠标离开某一操作的时候,在时间差内自动执行某一个操作

在Qt中如何判断鼠标离开某一操作的时候,在时间差内自动执行某一个操作。如在手写识别的过程中如何判断最后一笔输入完成时,(在输入过程中,一段时间内没有输入)在时间差内没有在输入,自动对输入结果识别显示,...

dl,dt,dd在什么时候适合使用呢

  • 2012年05月30日 15:38
  • 353B
  • 下载

什么时候学习编程都不晚

  • 2012年06月11日 10:50
  • 346KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:判断用户什么时候离开,以什么方式离开
举报原因:
原因补充:

(最多只允许输入30个字)