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


    站点用户统计是每一个站点比有得功能,但是很少有人实现在线用户统计得绝对精确或者说是相对精确,基于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()">

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

  • 相关阅读:
    【技术评网】说说豆瓣的URL设计
    在这一刻,还是忍不住满眼泪水
    装Sybase,装WAS 6.1的时候报错java.exe损坏的图象
    JasperRepor导出报表通用类
    XSS跨站攻击
    sql 脚本
    解决在无线网络下本机无法连接linux(红帽)虚拟机问题
    pl /sql导入导出表结构,表数据,sql脚本
    asp.net关于WEB端用户重复提交问题。禁用服务器控件按钮问题。
    MQ命令学习总结大全MQ常用命令
  • 原文地址:https://www.cnblogs.com/skylaugh/p/553289.html
Copyright © 2020-2023  润新知