using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.IO; namespace ZhengGong
{
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
Application.Lock(); Application["dateTime"] = DateTime.Now.ToShortDateString(); Application["ipList"] = new List<string>(); //默认总访问记录数为0
Application["count"] = 0;
//默认当前在线数为0
Application["online"] = 0;
//将当前人数写入文件中
WriteCountPerson(0); Application.UnLock();
} protected void Session_Start(object sender, EventArgs e)
{
//临时日期和系统记录的日期对比,若不相等表示不是同一天
string tempDate = DateTime.Now.ToShortDateString();
string appDate = Application["dateTime"].ToString();
if (!tempDate.Equals(appDate))
{
Application["dateTime"] = tempDate;
Application["ipList"] = null;
int countNums = ReadCountPerson();
WriteCountPerson(countNums + int.Parse(Application["count"].ToString()));
} //发起会话的客户端IP地址
string tempIp = Context.Request.UserHostAddress;
//设置一个会话的作用时间为一分钟,即一分钟内不做任何操作的话,该会话就会失效。
Session.Timeout = 1;
//用于存储客户端的IP地址集合,若没有则表示是新的一天并且实例化出集合对象
List<string> ipList = Application["ipList"] as List<string>;
if (ipList == null)
{
ipList = new List<string>(); //如果ipList集合为空那么实例化他
} //读取出文件中保存的总访问人数
int countNums_2 = ReadCountPerson();
if (!ipList.Contains(tempIp))
{
//在ip集合中添加客户端IP地址
ipList.Add(tempIp);
Application["ipList"] = ipList;
//总访问数在文件中保存的数据累加1
countNums_2 += 1;
WriteCountPerson(countNums_2); }
//当前在线人数累加1
Application["online"] = (int)Application["online"] + 1; Application["count"] = countNums_2; Application.UnLock();
} protected void Application_BeginRequest(object sender, EventArgs e)
{ } protected void Application_AuthenticateRequest(object sender, EventArgs e)
{ } protected void Application_Error(object sender, EventArgs e)
{ } protected void Session_End(object sender, EventArgs e)
{
Application.Lock(); Session.Abandon(); //当以一个会话结束后,注销该会话 int online = int.Parse(Application["online"].ToString());
if (online <= 0)
{
Application["online"] = 0;
}
else
{
Application["online"] = (int)Application["online"] - 1;
} Application.UnLock();
} protected void Application_End(object sender, EventArgs e)
{ } /// <summary>
/// 写入网页总访问人数
/// </summary>
/// <param name="nums"></param>
public void WriteCountPerson(int nums)
{
string filePath = System.Web.HttpRuntime.AppDomainAppPath + "ConfigFiles\\countPersonNums.ini";
if (!File.Exists(filePath))
{
File.Create(filePath);
}
StreamWriter sw = new StreamWriter(filePath, false);
sw.WriteLine("访问总数为:" + nums);
sw.Flush();
sw.Close();
} /// <summary>
/// 读取网页总访问人数
/// </summary>
public int ReadCountPerson()
{
try
{
int nums = 0;
string filePath = System.Web.HttpRuntime.AppDomainAppPath + "ConfigFiles\\countPersonNums.ini";
if (!File.Exists(filePath))
{
return 0;
}
FileStream fs = new FileStream(filePath, FileMode.Open);
StreamReader streamReader = new StreamReader(fs);
string strLine = streamReader.ReadLine();
string[] split = strLine.Split(':');
if (split.Length <= 1)
{
return 0;
}
int.TryParse(split[1], out nums);
fs.Flush();
fs.Close();
streamReader.Close();
streamReader.Dispose();
return nums;
}
catch (Exception ex)
{
throw ex;
}
}
}
}

直接贴出代码,使用c# 的Global.asax 全局配置文件来做处理,效果测试过大致可以但是有个小bug就是  关闭浏览器再打开浏览器那个sestion_start事件会再次执行,那么当前在线人数会有误,有待解决。

C# 统计在线人数和总访问人数的更多相关文章

  1. 使用Application对象简单完成网站总访问人数的统计

      Global.asax文件: using System.IO; protected void Application_Start(object sender, EventArgs e) { Fil ...

  2. PHP统计当前网站的访问人数,访问信息,被多少次访问。

    <?php  header('Content-type:text/html;charset=utf-8'); //统计流量(人数,访问次数,用户IP) //假设用户访问,得到IP地址 $remo ...

  3. ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)

    一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间 (IP_DateTime),些表的信 ...

  4. JS在在线人数和访问人数

    var date=new Date();var expiresDays=10;var count=1500+parseInt(date.getTime()/1000)-parseInt(date.ge ...

  5. Asp.Net 网站访问人数及在线人数

    利用Application对象和Session对象可以统计历史访问人数和当前在线人数. 在会话开始和结束时,一定要进行加锁和解锁操作.由于多个用户可以共享Application对象,因此加锁是必要的, ...

  6. JSP使用网站访问人数统计功能,方法与技巧

    实现网站访问人数统计功能的步骤: 创建静态登录页面,并指定表单提交由登录处理页面进行处理. 创建登录处理页面获得登录信息,查询数据库,判断该用户是否注册,如果该用户已注册,把已登录用户的信息保存在一个 ...

  7. servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)

    文章目录 1.什么是过滤器? 2.过滤器核心对象 3.过滤器创建和配置 4.举例子 1.什么是过滤器? 主要用于对客户端的请求进行过滤处理,再将经过过滤后的请求转交给下一个资源. 2.过滤器核心对象 ...

  8. 利用php比较精确的统计在线人数的办法

    利用php比较精确的统计在线人数的办法,注意这里所说的精确是指个数,如果需要精确在时间上,则需要根据实际情况调整代码中的有效时间.(自己没有写,从别人那拿过来的,先放着然后再研究)<?php// ...

  9. (实用篇)php精确的统计在线人数的方法

    这是一个非常精确的,通过php实现统计在线人数的方法,想知道怎么实现的请耐心阅读. <?php $filename='online.txt';//数据文件 $cookiename='VGOTCN ...

随机推荐

  1. devexpress treelist 过滤

    FilterMode.Smart 问题:dev 的treelist加过滤条件后,如果根节点不符合条件,则不显示数据 处理方法:把filterMode设置为smart即可. 备忘.

  2. Unity 延迟执行一段代码的较为优雅的方式

    在Unity中,延时执行一段代码或者一个方法或者几个方法的情况非常普遍. 一般会用到Invoke和InvokeRepeating方法.顾名思义,第一个是执行一次,第二个是重复执行. 看下定义: voi ...

  3. 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分

    在实用VS编程的时候大家经常会遇到一个问题: 下面小编来为大家提供一个简单的解决方案: 1.在Windows中打开功能里输入regedit,回车打开注册表编辑器: 2.转到路径HKEY_LOCAL_M ...

  4. xml 的读写

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. Java未被捕获的异常该怎么处理

    在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式.class Exc0 {    public static void ...

  6. 【数学】Matrix Multiplication

                                 Matrix Multiplication Time Limit: 2000MS   Memory Limit: 65536K Total S ...

  7. FC400的PM2.5过滤效率测试。。

    今天北京雾霾爆表,拿空气堡在外面测试,达到600多,然后在新风风口测试,差不多60到80.可以得到效率只有85%到90%左右,这和销售说的数值差不多,肯定达不到手册上写的99%,那是实验值,骗人的. ...

  8. Microsoft.Crm.Setup.SrsDataConnector.RegisterServerAction 操作失败

     System.Exception: Microsoft.Crm.Setup.SrsDataConnector.RegisterServerAction 操作失败. ---> System.Ty ...

  9. ARM——操作系统—最小操作系统-开发板测试

    怀着激动的心情,打算弄到硬件上试试. 折腾了一整天.终于运行起来了. 需要设置IBRD和CR,以及寄存器. 希望大家也能顺利完成自己的开发板实验. 我畅想了一下,目前所有带串口的嵌入式ARM设备,都应 ...

  10. C语言 01 形参实参

    之前的都在印象笔记记录 continue 结束本轮循环体,进入下一次循环.break 直接结束整个while循环 形参:定时函数时函数名后面中的参数实参:调用函数时传入的具体数据基本数据类型作为形参, ...