利用Application对象和Session对象可以统计历史访问人数和当前在线人数。

在会话开始和结束时,一定要进行加锁和解锁操作。由于多个用户可以共享Application对象,因此加锁是必要的,这样可以保证在同一时刻只有一个客户可以修改和存取Application对象的属性。如果加锁后,迟迟不给开锁,会导致用户无法访问Application对象。我们可以使用对象的Unlock方法来解除锁定。

在项目的web层的根目录下新建全局配置文件Global.asax以及日志文件VisitedLog.txt,这样做的好处是不用操作数据库,将计数写入日志文件,即使服务器重启计数也不会清零。首先,在Global.asax文件中添加以下代码:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState; namespace xxjy.Global
{
public class Global : System.Web.HttpApplication
{
string sLogFile = AppDomain.CurrentDomain.BaseDirectory + "VisitedLog.txt";//日志文件的路径
protected void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
// Code that runs on application startup
//刚启动,为了防止服务器意外死机重启等因素,需要从记录文件中读取数目
if (!System.IO.File.Exists(sLogFile))
{
System.IO.FileStream fsnew = System.IO.File.Create(sLogFile);
fsnew.Close();
}
string[] lines = System.IO.File.ReadAllLines(sLogFile);//读取并得到日志文件的行数
double iTotalCount = ;//设置初始访问人数为0
int iOnline = ;//设置初始在线人数为0
if (lines != null && lines.Length > )
{
Double.TryParse(lines[lines.Length - ].ToString(), out iTotalCount);
}
Application["TotalCount"] = iTotalCount;
Application["Online"] = iOnline;
} protected void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
// Code that runs when a new session is started
Session.Timeout = ;
Application.Lock();//锁定变量
Application["TotalCount"] = System.Convert.ToDouble(Application["TotalCount"]) + ;//为页面访问量+1
Application["Online"] = System.Convert.ToInt32(Application["Online"]) + ;//为页面在线人数+1
Application.UnLock();//解锁
if (Convert.ToInt32(Application["TotalCount"]) % == ) //为了防止服务器死机重启等意外因素丢失数据,我们每隔50个访客更新一下记录文件,这个需要根据访问量调整
{
System.IO.StreamWriter rw = System.IO.File.CreateText(sLogFile);
rw.WriteLine(Application["TotalCount"]);
rw.Flush();
rw.Close();
}
} 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)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
Application.Lock();
Application["Online"] = System.Convert.ToInt32(Application["Online"]) - ;//在线人数减1
Application.UnLock(); } protected void Application_End(object sender, EventArgs e)
{
//在应用程序关闭时运行的代码
//保存当前访问
System.IO.StreamWriter rw = System.IO.File.CreateText(sLogFile);
rw.WriteLine(Application["TotalCount"]);
rw.Flush();
rw.Close();
}
}
}

然后在xxx.aspx页面添加能显示文本的控件,如label,或直接在cs文件中用Rsponse.write()输出。

接着在cs中添加如下代码:

  protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Application["TotalCount"] != null)
{
Label1.Text = Application["TotalCount"].ToString();
}
}
}

Asp.Net 网站访问人数及在线人数的更多相关文章

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

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

  2. 26种提高ASP.NET网站访问性能的优化方法 .

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池 ...

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

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

  4. 013. asp.net统计网站访问人数

    Global.asax中的代码: <%@ Application Language="C#" %> <script runat="server" ...

  5. asp.net 网站访问变慢

    资料一 单个网站解决方法:   把应用程序池回收时间缩短到300-600分钟,其间回收过程中,需要占用一点CPU资源,没办法,为了稳定性,再把回收时间设为凌晨5点. 多网站解决方法: 视服务器网站的多 ...

  6. 一种基于自定义代码的asp.net网站访问IP过滤方法!

    对于一些企业内部核心系统,特别是外网访问的时候,为了信息安全,可能需要对外部访问的IP地址作限制,虽然IIS中也提供了根据IP地址或IP地址段进行限制或允许,但并没有提供根据IP地址所在的城市进行限制 ...

  7. application 统计网站访问人数

    参考书<JSP Web 开发案例教程> index.jsp welcome.jsp 显示

  8. asp.net网站访问时不能显示页面

    web => 属性 => web => servers =>create virtual directory

  9. C#统计网站访问总人数和当前在线人数

    一.打开vitualstudio2010,新建一个网站,然后添加新项,新建一个login.aspx和index.aspx页面.再添加新项,选择全局应用程序类,该页面为Global.asax. 第一步: ...

随机推荐

  1. Premiere Pro CC问题集,不断更新

    1.Premiere Pro CC不好用? 是的.原因如下: 1.1 Adobe公司不注重用户体验,不注重工作流程,导致这款软件的用户体验很差,设计也很烂.对比Adobe公司当年用户体验最好的软件 F ...

  2. Linux的文件夹配置

    学习linux我个人认为首先须要了解清楚在系统中没给目录的详细事干什么的才行,这样在以后的学习其中以及在使用linux系统的过程中才会事半功倍. /bin 主要内容是系统的运行文件,可是/bin中的运 ...

  3. px/em/pt区别和转换

    老是被人问到px.pt和em的区别,自己有时候也会纠结到底该用什么单位,今天特意查了一些文章,下面这篇虽然很久远了,但解释的比较全面,转载收藏之.点击查看原文 这里引用的是Jorux的“95%的中国网 ...

  4. validate大表单验证

    Vaidate 插件 在前端开发中, 我们会遇到大表单的验证和组合成JSON, 这是一项巨大的任务, 如果都通过 手动编写低级代码来实现 50+ input类型的验证和复杂JSON的组装, 这无疑是异 ...

  5. 学习GDI+ (1)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. Javascript实例技巧精选(8)—计算当月剩余天数

    >>点击这里下载完整html源码<< 截图如下: 利用Javascript在网页上计算当前月份的剩余天数,相应代码如下: <script language="J ...

  7. SZU:B47 Big Integer I

    Judge Info Memory Limit: 32768KB Case Time Limit: 10000MS Time Limit: 10000MS Judger: Normal Descrip ...

  8. 取得ASKII码值和汉语拼音

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXMAAACmCAIAAACnXPjtAAAgAElEQVR4nO2de3wb1YHv56+7e/fe/e ...

  9. JavaScript module pattern精髓

    JavaScript module pattern精髓 avaScript module pattern是一种常见的javascript编码模式.这种模式本身很好理解,但是有很多高级用法还没有得到大家 ...

  10. Fiddler工具

    Fiddler初探 我们知道监视Http和Https请求的工具有多种,例如:HttpWatch,FireBug等.但是今天接触到一种新的工具Fiddler.Fiddler能记录所有客户端和服务器的ht ...