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


    站点用户统计是每一个站点比有得功能,但是很少有人实现在线用户统计得绝对精确或者说是相对精确,基于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.clientX0)
     7          {
     8            WebApplication3.WebForm1.Logoff().value;
     9          }

    10       }

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

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

  • 相关阅读:
    查看客户端的IP地址,机器名,MAC地址,登陆名等信息
    查看sqlserver 2008中性能低下的语句
    搜索包含指定关键字的存储过程
    获得客户端详细信息以及每个进程的sql语句
    实战:sqlserver 日常检查脚本
    NIO的学习总结
    JavaWEB过滤器和监听器技术
    抽象工厂模式代码:
    详解 equals() 方法和 hashCode() 方法
    net.sf.json JSONObject与JSONArray使用实例
  • 原文地址:https://www.cnblogs.com/KUDO/p/443460.html
Copyright © 2020-2023  润新知