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. 第一步: ...
随机推荐
- SQL Server相似度比较函数
原文:SQL Server相似度比较函数 相似度函数 概述 最近有人问到关于两个字段求相似度的函数,所以就写了一篇关于相似度的函数,分别是“简单的模糊匹配”,“顺序匹配”,“一对一位置匹配”.在 ...
- Node.js连接MySQL数据库及构造JSON的正确姿势
做一下整理,以前也很随意的引入包链接数据库,后来发现常常连接出问题,异常退出,后来使用在网上一个方法解决问题,网址由于书签丢失,抱歉不能引用了.再有就是简单的模块化下,使得目录合理点,再有就是说明一下 ...
- sql点滴41—mysql常见sql语法
原文:sql点滴41-mysql常见sql语法 ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename ...
- 快速构建Windows 8风格应用28-临时应用数据
原文:快速构建Windows 8风格应用28-临时应用数据 本篇博文主要介绍临时应用数据概览.如何构建临时应用数据. 一.临时应用数据概览 临时应用数据相当于网页中缓存,这些数据文件是不能够漫游的,并 ...
- C语言身份证信息查询系统(修改版)
很久以前写了一个<C语言身份证信息查询系统>,如果你点击链接进去看了. 估计也会被我那磅礴大气的代码震惊到的,最近复习/学习文件操作,把代码改了改,算是对以前还不会文件操作的时候的愿望,哈 ...
- 一些小bug
1.ie6-ie8中是不支持的,需要加上下面这句话: filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70); 2.去除虚线框 a ...
- 读书笔记—CLR via C#委托和attribute
前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...
- 使用winform控件注意线程绘制界面冲突
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往 ...
- ASP.NET MVC + EF 利用存储过程读取大数据
ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK 看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, ...
- SpringMVC视图
SpringMVC视图机制详解[附带源码分析] 目录 前言 重要接口和类介绍 源码分析 编码自定义的ViewResolver 总结 参考资料 前言 SpringMVC是目前主流的Web MVC框架之一 ...