Asp.Net 网站访问人数及在线人数
利用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 网站访问人数及在线人数的更多相关文章
- JSP使用网站访问人数统计功能,方法与技巧
实现网站访问人数统计功能的步骤: 创建静态登录页面,并指定表单提交由登录处理页面进行处理. 创建登录处理页面获得登录信息,查询数据库,判断该用户是否注册,如果该用户已注册,把已登录用户的信息保存在一个 ...
- 26种提高ASP.NET网站访问性能的优化方法 .
1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池 ...
- servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
文章目录 1.什么是过滤器? 2.过滤器核心对象 3.过滤器创建和配置 4.举例子 1.什么是过滤器? 主要用于对客户端的请求进行过滤处理,再将经过过滤后的请求转交给下一个资源. 2.过滤器核心对象 ...
- 013. asp.net统计网站访问人数
Global.asax中的代码: <%@ Application Language="C#" %> <script runat="server" ...
- asp.net 网站访问变慢
资料一 单个网站解决方法: 把应用程序池回收时间缩短到300-600分钟,其间回收过程中,需要占用一点CPU资源,没办法,为了稳定性,再把回收时间设为凌晨5点. 多网站解决方法: 视服务器网站的多 ...
- 一种基于自定义代码的asp.net网站访问IP过滤方法!
对于一些企业内部核心系统,特别是外网访问的时候,为了信息安全,可能需要对外部访问的IP地址作限制,虽然IIS中也提供了根据IP地址或IP地址段进行限制或允许,但并没有提供根据IP地址所在的城市进行限制 ...
- application 统计网站访问人数
参考书<JSP Web 开发案例教程> index.jsp welcome.jsp 显示
- asp.net网站访问时不能显示页面
web => 属性 => web => servers =>create virtual directory
- C#统计网站访问总人数和当前在线人数
一.打开vitualstudio2010,新建一个网站,然后添加新项,新建一个login.aspx和index.aspx页面.再添加新项,选择全局应用程序类,该页面为Global.asax. 第一步: ...
随机推荐
- Android项目---语言适配
android多国语言文件夹 android多国语言文件夹文件汇总如下:(有些语言的书写顺序可能跟中文是相反的) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中 ...
- T4模板demo
T4模板_根据DB生成实体类 为了减少重复劳动,可以通过T4读取数据库表结构,生成实体类,用下面的实例测试了一下 1.首先创建一个项目,并添加文本模板: 2.添加 文本模板: 3.向T4文本模板文 ...
- Bootstrap 模态框(也可以说的弹出层)
最近在尝试使用bootstrap的模态框 使用模态框主要要引入一下几个js和css: bootstrap.css jquery.1.9.1.js(这个可以灵活选择) bootstrap.js html ...
- Ubuntu下安装Python绘图库Matplotlib的方法
在安装好Python的基础上, sudo apt-get install python-numpy sudo apt-get install python-scipy sudo apt-get ins ...
- Linux学习-Linux历史(总结篇)
Linux之前,Unix的历史 1969年以前,一个伟大的梦想:Bell,MIT与GE的Multics系统 在此之前的计算机主机少,用户从多,程序是在读卡纸上打洞,光是等待.为了更加强化大型主机的功能 ...
- 【C#基础知识】静态构造函数,来源于一道面试题的理解
看到园友的一道面试题,很好奇,测试了一下结果. public class A { public static int X=B.Y ; public A() { ++X; } } public clas ...
- YARN之上的大数据框架REEF:微软出品,是否值得期待?
YARN之上的大数据框架REEF:微软出品,是否值得期待? 摘要:微软即将开源大数据框架REEF,REEF运行于Hadoop新一代资源管理器YARN的上层.对于机器学习等在数据传输.任务监控和结果 ...
- JavaScript怎么上传图片
JavaScript怎么上传图片 在XMLHttpRequest Level2出台之前,大多数的异步上传图片都是利用iframe去实现的. 至于具体的实现细节,我就不在这边啰嗦的,Google一下就有 ...
- 开启和禁用Wifi热点命令
netsh wlan set hostednetwork mode=allow ssid=[无线网络名字] key=[密码] netsh wlan start hostednetwork --启用 禁 ...
- jQuery easyui刷新当前tabs
更新特定的选项卡面板 可使用update方法,param参数包含2个属性: tab: 将被更新的选项卡. options: 选项卡相关配置项. Example: //当前tab var current ...