1.新建网站,添加几个窗体。webForm1.aspx ,ViewStateForm.aspx

2.在网站的根目录下添加全局应用程序类“Global.aspx” 。(重要)

3.在“Global.aspx” 有固有的格式和会话信息结构。

4.在“Global.aspx”中各个函数中添加处理代码。详细如下:

<%@ Application Language="C#" %>

<script runat="server">

void Application_Start(object sender, EventArgs e)   //初始化站点的在线人数
    {
        // 在应用程序启动时运行的代码//初始化变量:UserCount 和 StatCount

Application.Lock();      //临界变量,使用加锁功能,其他用户不能访问。
        Application["UserCount"] = 0;
        Application.UnLock();     //临界变量被解锁。

Application.Lock();      //临界变量,使用加锁功能,其他用户不能访问。
        Application["StatCount"] = 0;
        Application.UnLock();     //临界变量被解锁。

Application.Lock();      //临界变量,使用加锁功能,其他用户不能访问。
        Application["StatCount_ViewSF"] = 0;
        Application.UnLock();     //临界变量被解锁。

}
   
    void Application_End(object sender, EventArgs e)
    {
        //  在应用程序关闭时运行的代码

}
       
    void Application_Error(object sender, EventArgs e)
    {
        // 在出现未处理的错误时运行的代码

}

void Session_Start(object sender, EventArgs e)      //站点在线人数加一
    {
        // 在新会话启动时运行的代码
        Application.Lock();      //临界变量,使用加锁功能,其他用户不能访问。
        Application["UserCount"] = Int32.Parse(Application["UserCount"].ToString()) + 1;
        Application.UnLock();       //临界变量被解锁。
       
        //测试某一页的访问量※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
        String pageurl = Request.Url.ToString();//获取用户访问的页面
       
        if(pageurl .EndsWith ("WebForm1.aspx")) //判断访问的是否是默认页
        {
            //锁定变量
            Application.Lock();
            //页面访问量加一
            Application["StatCount"] = int.Parse(Application["StatCount"].ToString()) + 1;
            //解锁
            Application.UnLock();
        }

else if (pageurl.EndsWith("ViewStateForm.aspx")) //判断访问的是否是默认页
        {
            //锁定变量
            Application.Lock();
            //页面访问量加一
            Application["StatCount_ViewSF"] = int.Parse(Application["StatCount_ViewSF"].ToString()) + 1;
            //解锁
            Application.UnLock();
        }

}  //&&&&&&&&&&&&&&&****************$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

void Session_End(object sender, EventArgs e)          //站点在线人数减一
    {
        // 在会话结束时运行的代码。
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
        // 或 SQLServer,则不会引发该事件。
        Application.Lock();
        Application["UserCount"] = Int32.Parse(Application["UserCount"].ToString()) - 1;
        Application.UnLock();
       
    }

//Http请求开始和结束时的处理事件
    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        //取得表的TabID
        //int tabId = 0; int tabIndex = 0;
        //if(Request .Params ["TabId"]!=null)
        //{
        //    tabId = Int32.Parse(Request .Params ["TabId"]);
           
        //}
        //if(Request .Params ["tabIndex"]!=null )
        //{
        //    tabIndex = Int32.Parse(Request .Params ["TabIndex"]);
        //}
      
    }
    protected void Application_EndRequest(object sender, EventArgs e)
    {
   
    }

//Http请求验证的处理事件
    protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
   
    }
 
      
</script>

5. 在webForm1.aspx 的相应的CS文件中添加如下的代码:

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack) { OutputUserCount(); }
    }
    protected void OutputUserCount() //显示当前站点在线人数
    {
        Response.Write("站点在线人数:");
        Response.Write(Application["UserCount"].ToString());
        Response.Write("  人。");

Response.Write("本页面的访问量:");
        Response.Write(Application["StatCount"].ToString());
        Response.Write("   。");
       
    }
}

6. ViewStateForm.aspx 的相应的CS文件中添加如下的代码:

public partial class ViewStateForm : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
       
  
        if (!Page.IsPostBack) { OutputUserCount(); }
    }
    protected void OutputUserCount() //显示当前站点在线人数
    {
        Response.Write("站点在线人数:");
        Response.Write(Application["UserCount"].ToString());
        Response.Write("  人。");

Response.Write("本页面的访问量:");
        Response.Write(Application["StatCount_ViewSF"].ToString());
        Response.Write("   。");
    }

}

7. webconfig 中也有部分对session的配置控制。

<sessionState   mode="InProc"
   cookieless="true"
   timeout="20" />

<!--
   会话状态设置
       默认状态下,asp.net 使用 cookie 标示哪些请求属于特定的会话。
    如果cookie 不可用,则可以通过将会话标识符添加到url,来跟踪会话。
    若要禁用cookie ,请设置sessionstate cookieless="true"。
    首次使用了:<sessionState
  mode="InProc"
  stateConnectionString="tcpip=127.0.0.1:42424"
  sqlConnectionString="data source= 127.0.0.1;userid=sa;password="
  cookieless="false"
  timeout="20"
  /> 后便成功了。不知道为什么?新建立了网站,没有用居然也可以。莫名奇妙,看来不是这个的原因,应该是系统暂时性错误。
  -->

然后就可以在IIS中进行测试了。这个处理方法在IIS重启后就会重新从零进行统计。

asp.net 在线人数统计\页面访问量的更多相关文章

  1. jsp统计页面访问量和刷访问量的简单使用

    ~Jsp可以进行简单的页面访问量统计,当然也可以使用Jsp刷访问量. 1:第一种使用全局变量<%! int i=0;%>进行页面的访问量统计,只有新打开一个浏览器才可以进行统计. 2:第二 ...

  2. 统计网站访问量,以GD2库图像形式输出

    index.php页面<?php session_start(); if($_SESSION[temp]==""){ //判断$_SESSION[temp]=="& ...

  3. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(39)-在线人数统计探讨

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(39)-在线人数统计探讨 系列目录 基于web的网站在线统计一直处于不是很精准的状态!基本上没有一种方法可 ...

  4. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(40)-精准在线人数统计实现-[过滤器+Cache] 系列目录 上次的探讨没有任何结果,我浏览了大量的文章 ...

  5. Web并发页面访问量统计实现

    Web并发页面访问量统计实现 - huangshulang1234的博客 - CSDN博客https://blog.csdn.net/huangshulang1234/article/details/ ...

  6. Spring Boot入门(12)实现页面访问量统计功能

      在日常的网站使用中,经常会碰到页面的访问量(或者访问者人数)统计.那么,在Spring Boot中该如何实现这个功能呢?   我们的想法是比较简单的,那就是将访问量储存在某个地方,要用的时候取出来 ...

  7. 如何实现对网站页面访问量的统计(javaweb和php)

    如何实现对网站页面访问量的统计(javaweb和php) 一.总结 一句话总结:其实很简单啦,每访问一次那个页面对应的index函数(控制器中的那个函数)访问次数就加1就可以了. 1.javaweb中 ...

  8. 用HttpSessionListener与HttpSessionBindingListener实现在线人数统计

    在线人数统计方面的实现,最初我的想法是,管理session,如果session销毁了就减少,如果登陆用户了就新增一个,但是如果是用户非法退出,如:未注销,关闭浏览器等,这个用户的session是管理不 ...

  9. 关于在asp.net的web页面中的全局变量问题

    在asp.net的web页面中是不是没有全局变量?有的,在Class类内部的都是,只不过在WebWofm程式中跟WinForm和Console程式有些区别,当页面刷新时,它们的值不会保持,依然会再次初 ...

随机推荐

  1. C语言的static和extern关键字

    我的博客:www.while0.com 如果A.c要包含B.c里的一个变量或函数,则在A.c中要用extern关键字声明.注意: ①如果是包含的B.c里的函数,则在A.c里声明的时候可以不写exter ...

  2. 【HDOJ】3308 LCIS

    线段树,题目感觉比较难,看别人思路做的.还得继续练这个专题. #include <iostream> #include <cstdio> #include <cstrin ...

  3. SDN基础理解

    本文转载自:http://blog.csdn.net/freezgw1985/article/details/16873677 个人觉得对很适合对SDN的入门级的概念性理解,先暂时copy一下,等研究 ...

  4. 一个awk命令的demo

    /prefix_* | awk -F'\x3' '{print $2}' | awk -F'\x2' '{for(i=0; i<NF; i++)print $i}'> ~/20140819 ...

  5. poj 3678 Katu Puzzle(Two Sat)

    题目链接:http://poj.org/problem?id=3678 代码: #include<cstdio> #include<cstring> #include<i ...

  6. 安装 PLSQL笔记

    安装 PLSQL Developer 1. 下载PLSQL Developer 安装文件.安装文件类型是exe,直接安装就可以. 这个时候打开PLSQL Developer ,打开 help –> ...

  7. Google翻译

    本博文的主要内容有 .Google翻译的介绍    .Google翻译之一:内容板块的翻译    .Google翻译之二:网页的翻译  .Google翻译之四:文档的翻译    .Google翻译之四 ...

  8. poj 1258 Agri-Net【最小生成树(prime算法)】

    Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 44827   Accepted: 18351 Descri ...

  9. Codeforces Round #363 (Div. 2) 698B Fix a Tree

    D. Fix a Tree time limit per test 2 seconds memory limit per test 256 megabytes     A tree is an und ...

  10. highcharts动态获取数据生成图表问题

    动态获取数据说白点就是从后台传值到前台,前台把这些值赋值给x轴与y轴(这里指的是你X轴与Y轴都是变化的数据,如果你的X轴是固定的,像时间等等的那就另说).  柱状图的动态传值: //获取后台数据 va ...