您的位置:首页 > 运维架构 > 网站架构

使用asax 网站加个今日访问,总访问人数、在线人数

2010-11-29 20:45 302 查看
<%@ Application Language="C#" %>

<script runat="server">
//用于记录 总人数,今日人数,在线人数
/// <summary>
/// 总人数,今日人数,在线人数
/// </summary>
static int totalCount, todayCount, onlineCount;

/// <summary>
/// 更新今日访问访问数的标志
/// </summary>
static DateTime lastCleanUp;

/// <summary>
/// 锁对象
/// </summary>
static object _obj = new object();

/// <summary>
/// 日志文件的路径
/// </summary>
string logFile = AppDomain.CurrentDomain.BaseDirectory + "visitLog.txt";

protected void Application_Start(object sender, EventArgs e)
{
//刚启动,为了防止服务器意外死机重启等因素,需要从记录文件中读取数目
if (System.IO.File.Exists(logFile))
{
string[] lines = System.IO.File.ReadAllLines(logFile);
if (lines.Length >= 3)
{
int.TryParse(lines[0], out totalCount);
int.TryParse(lines[1], out todayCount);
DateTime.TryParse(lines[2], out lastCleanUp);
}

}
onlineCount = 0;
}

protected void Session_Start(object sender, EventArgs e)
{
//锁定对象确定单线程访问
lock (_obj)
{
//如果日期变化了,将今日访问归零
if (DateTime.Now.Day != lastCleanUp.Day)
{
lastCleanUp = DateTime.Now;
todayCount = 0;
}

//计数
todayCount++;
totalCount++;

//为了防止服务器死机重启等意外因素丢失数据,我们每隔50个访客更新一下记录文件
//这个需要根据访问量调整
if (totalCount % 50 == 0)
{
string[] fns = new string[] { totalCount.ToString(), todayCount.ToString(), lastCleanUp.ToString() };
System.IO.File.Delete(logFile);
System.IO.File.WriteAllLines(logFile, fns);
}
//在线人数加1
onlineCount++;
}
}

protected void Session_End(object sender, EventArgs e)
{
//确保不冲突
lock (_obj)
{
//在线人数减1
onlineCount--;
}
}

protected void Application_End(object sender, EventArgs e)
{
//保存当前访问
string[] fns = new string[] { totalCount.ToString(), todayCount.ToString(), lastCleanUp.ToString() };
System.IO.File.Delete(logFile);
System.IO.File.WriteAllLines(logFile, fns);
}

</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: