C# 统计在线人数和总访问人数
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# 统计在线人数和总访问人数的更多相关文章
- 使用Application对象简单完成网站总访问人数的统计
Global.asax文件: using System.IO; protected void Application_Start(object sender, EventArgs e) { Fil ...
- PHP统计当前网站的访问人数,访问信息,被多少次访问。
<?php header('Content-type:text/html;charset=utf-8'); //统计流量(人数,访问次数,用户IP) //假设用户访问,得到IP地址 $remo ...
- ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)
一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间 (IP_DateTime),些表的信 ...
- JS在在线人数和访问人数
var date=new Date();var expiresDays=10;var count=1500+parseInt(date.getTime()/1000)-parseInt(date.ge ...
- Asp.Net 网站访问人数及在线人数
利用Application对象和Session对象可以统计历史访问人数和当前在线人数. 在会话开始和结束时,一定要进行加锁和解锁操作.由于多个用户可以共享Application对象,因此加锁是必要的, ...
- JSP使用网站访问人数统计功能,方法与技巧
实现网站访问人数统计功能的步骤: 创建静态登录页面,并指定表单提交由登录处理页面进行处理. 创建登录处理页面获得登录信息,查询数据库,判断该用户是否注册,如果该用户已注册,把已登录用户的信息保存在一个 ...
- servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
文章目录 1.什么是过滤器? 2.过滤器核心对象 3.过滤器创建和配置 4.举例子 1.什么是过滤器? 主要用于对客户端的请求进行过滤处理,再将经过过滤后的请求转交给下一个资源. 2.过滤器核心对象 ...
- 利用php比较精确的统计在线人数的办法
利用php比较精确的统计在线人数的办法,注意这里所说的精确是指个数,如果需要精确在时间上,则需要根据实际情况调整代码中的有效时间.(自己没有写,从别人那拿过来的,先放着然后再研究)<?php// ...
- (实用篇)php精确的统计在线人数的方法
这是一个非常精确的,通过php实现统计在线人数的方法,想知道怎么实现的请耐心阅读. <?php $filename='online.txt';//数据文件 $cookiename='VGOTCN ...
随机推荐
- mybatis---实现关联表查询
推荐学习博客: 1.http://www.cnblogs.com/xdp-gacl/p/4264440.html 2.http://www.cnblogs.com/yaobolove/p/544404 ...
- 给php添加ssl证书
composer下载时报错: The "https://packagist.org/packages.json" file could not be downloaded: SSL ...
- MWeb 1.4 新功能介绍二:静态博客功能增强
MWeb 比较有特色的是一键生成静态博客功能,然后从 MWeb 最开始规划要做静态博客生成功能时,我就希望 MWeb 的静态博客生成功能在易用的同时,还要有很强大的扩展性. 比如说能自己增加网站公告, ...
- Linux selinux iptables
关闭SELINUX – 使用getenforce命令检查SELINUX状态,若结果不是”Disabled”,可使用setenforce 0命令临时关闭SELINUX.要永久关闭SELINUX,需修改/ ...
- FORTRAN 90标准函数(一) (转)
符号约定: l I代表整型;R代表实型;C代表复型;CH代表字符型;S代表字符串;L代表逻辑型;A代表数组;P代表指针;T代表派生类型;AT为任意类型. l s:P表示s类型为P类型(任意kind ...
- 【C#进阶】多播委托和委托数组像是一回事~
这个MathOperation类有三静态方法,参数都是double,并且没有返回值,考虑用Action<>() 这种预定义的委托哦 class MathOperations { publi ...
- gulp外挂 uglify 的使用
1.js文件压缩 第一步:安装外挂 : 第二步:gulpfile.js 配置 : (首先看你的package.json 中有没有添加依赖,如果有 这一句,代表添加成功啦.) 输入以下代码 : var ...
- 飞机大战编写以及Java的面向对象总结
面向对象课程完结即可编写一个简单的飞机大战程序.我觉得我需要总结一下 飞机大战中类的设计: 父类:FlyingObject(抽象类) 接口:Award .Enemy 子类:Hero.Bullet.Ai ...
- Extjs 3.4 同值合并
摘自:http://www.cnblogs.com/kunpengit/archive/2012/11/13/2768239.html/** * grid gridPanel 需要合并的表格 * ro ...
- 关于linux下关于ssd的使用
1. 这几个文件系统可以在挂载的时候使用 discard 选项:ext4, xfs, jfs, vfat 2. 使用 fstrim 命令可以实现周期性的 trim,挂载时使用discard标记可以实 ...