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. Union和Union All到底有什么区别

    以前一直不知道Union和Union All到底有什么区别,今天来好好的研究一下,网上查到的结果是下面这个样子,可是还是不是很理解,下面将自己亲自验证: Union:对两个结果集进行并集操作,不包括重 ...

  2. JS调用中文乱码怎么办

    网络上有很多的实用的小插件,这些小插件可以直接拿过来实用即可,但是在使用的时候会出现很多的问题,就比如与说今天要讲的乱码中文乱码的问题,这个主要是因为我们调用的js和我们写的程序使用的编码不同,那么如 ...

  3. JMX

    一.为什么使用JMX,解决那些问题 举一个应用实例:在一个系统中常常会有一些配置信息,比如服务的IP地址,端口号什么的,那么如何来写这些代码呢? 写死在程序里,到要改变时就去改程序,然后再编译发布: ...

  4. 限制action所接受的请求方式或请求参数

    原文:http://www.cnblogs.com/liukemng/p/3726897.html 2.限制action所接受的请求方式(get或post): 之前我们在HelloWorldContr ...

  5. Python中递归的最大次数

    实际应用中遇到了一个python递归调用的问题,报错如下: RuntimeError: maximum recursion depth exceeded while calling a Python ...

  6. 《玩转D语言系列》一、通过四个版本的 Hello Word 初识D语言

    对于D语言,相信很多朋友还没听说过,因为它还不够流行,跟出自名门的一些语言比起来也没有名气,不过这并不影响我对它的偏爱,我就是这样的一种人,我喜欢的女孩子一定是知己型,而不会因为她外表,出身,学历,工 ...

  7. 利用 Serial Over Lan(SOL)搭建 XEN 的调试信息输出环境

    如有转载,请注明出处与本文连接,谢谢! 修改XEN的源码实现额外的功能,需要有一个调试环境来得到XEN的调试信息(有关源码编译并安装 XEN 请阅读我以前的博文:在CentOS下源码安装 Xen并搭建 ...

  8. .NET委托和事件

    .net学习之委托和事件   1.什么是委托 通俗的说:委托就是一个能够存储符合某种格式(方法签名)的方法的指针的容器 上传图片: 2.委托语法 准备一个方法:string Hello(string ...

  9. java代码优化

    优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率. 1.尽量指定类的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final的例子,例如java ...

  10. JNI 翻译 转 Delphi 的 经验 方法

    首发在 ①FireMonkey[移动开发] 16523232 欢迎使用 FMX 开发手机程序的高手来访. 注意:如果您看了本文,翻译了 JNI,请发布到本群共享一份.不同意本规定的,请立即删除本文.凡 ...