Asp.Net 网站访问人数及在线人数
2013-08-06 13:36
381 查看
利用Application对象和Session对象可以统计历史访问人数和当前在线人数。
在会话开始和结束时,一定要进行加锁和解锁操作。由于多个用户可以共享Application对象,因此加锁是必要的,这样可以保证在同一时刻只有一个客户可以修改和存取Application对象的属性。如果加锁后,迟迟不给开锁,会导致用户无法访问Application对象。我们可以使用对象的Unlock方法来解除锁定。
在项目的web层的根目录下新建全局配置文件Global.asax以及日志文件VisitedLog.txt,这样做的好处是不用操作数据库,将计数写入日志文件,即使服务器重启计数也不会清零。首先,在Global.asax文件中添加以下代码:
然后在xxx.aspx页面添加能显示文本的控件,如label,或直接在cs文件中用Rsponse.write()输出。
接着在cs中添加如下代码:
在会话开始和结束时,一定要进行加锁和解锁操作。由于多个用户可以共享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;//设置初始访问人数为0 int iOnline = 0;//设置初始在线人数为0 if (lines != null && lines.Length > 0) { Double.TryParse(lines[lines.Length - 1].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 = 10; Application.Lock();//锁定变量 Application["TotalCount"] = System.Convert.ToDouble(Application["TotalCount"]) + 1;//为页面访问量+1 Application["Online"] = System.Convert.ToInt32(Application["Online"]) + 1;//为页面在线人数+1 Application.UnLock();//解锁 if (Convert.ToInt32(Application["TotalCount"]) % 50 == 0) //为了防止服务器死机重启等意外因素丢失数据,我们每隔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;//在线人数减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 网站访问人数及在线人数
- 网站今日访问,总访问及在线人数统计 asp.net
- ASP.NET实现记录历史访问人数和当前在线人数
- ASP.NET获取网站访问人数
- Asp.Net实现记录历史访问人数和当前在线人数
- 【ASP.NET】——统计在线人数、历史访问人数
- ASP.NET实现记录历史访问人数和当前在线人数
- ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)
- Asp.Net实现记录历史访问人数和当前在线人数
- ASP.NET在线人数和访问人数总量统计
- ASP.NET实现记录历史访问人数和当前在线人数
- ASP.NET实现记录历史访问人数和当前在线人数
- asp.net MVC 统计在线人数功能实现
- Asp.net统计在线人数和总人数
- asp.net 在线人数统计、页面访问量
- 关于云服务器的ASP.Net MVC网站实现被外网访问
- asp.net防止同一帐户重复登陆,查看在线人数
- asp.net网站未能加载文件或程序集或它的某一个依赖项。拒绝访问
- VS2005下实现asp.net在线人数的统计
- 如何把asp.net网站发布到自己的电脑,外网也可以访问