国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

ASP.net中網(wǎng)站訪問量統(tǒng)計方法代碼

來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:40:28
文檔

ASP.net中網(wǎng)站訪問量統(tǒng)計方法代碼

ASP.net中網(wǎng)站訪問量統(tǒng)計方法代碼:一、建立一個數(shù)據(jù)表IPStat用于存放用戶信息 我在IPStat表中存放的用戶信息只包括登錄用戶的IP(IP_Address),IP來源(IP_Src)和登錄時間(IP_DateTime),些表的信息本人只保存一天的信息,如果要統(tǒng)計每個月的信息則要保存一個月。因為我不太懂對數(shù)據(jù)日志的
推薦度:
導讀ASP.net中網(wǎng)站訪問量統(tǒng)計方法代碼:一、建立一個數(shù)據(jù)表IPStat用于存放用戶信息 我在IPStat表中存放的用戶信息只包括登錄用戶的IP(IP_Address),IP來源(IP_Src)和登錄時間(IP_DateTime),些表的信息本人只保存一天的信息,如果要統(tǒng)計每個月的信息則要保存一個月。因為我不太懂對數(shù)據(jù)日志的

一、建立一個數(shù)據(jù)表IPStat用于存放用戶信息

我在IPStat表中存放的用戶信息只包括登錄用戶的IP(IP_Address),IP來源(IP_Src)和登錄時間(IP_DateTime),些表的信息本人只保存一天的信息,如果要統(tǒng)計每個月的信息則要保存一個月。因為我不太懂對數(shù)據(jù)日志的操作,所以創(chuàng)建此表,所以說我笨吧,哈哈。

二、在Global.asax中獲取用戶信息

在Global.asax的Session_Start即新會話啟用時獲取有關的信息,同時在這里實現(xiàn)在線人數(shù)、訪問總?cè)藬?shù)的增量統(tǒng)計,代碼如下:

代碼如下:
void Session_Start(object sender, EventArgs e)
{
//獲取訪問者的IP
string ipAddress = Request.ServerVariables["REMOTE_ADDR"];
//獲取訪問者的來源
string ipSrc;
//判斷是否從搜索引擎導航過來的
if (Request.UrlReferrer == null)
{
ipSrc = "";
}
else
{
//獲取來源地址
ipSrc = Request.UrlReferrer.ToString();
}
//獲取訪問時間
DateTime ipDatetime = DateTime.Now;
//保存IP信息到數(shù)據(jù)庫中
IPControl cont = new IPControl();
cont.AddIP(ipAddress, ipSrc, ipDatetime);

//獲取用戶訪問的頁面
string pageurl = Request.Url.ToString();
//判斷訪問的是否是默認頁
if (pageurl.EndsWith("IPStat.aspx"))
{
//鎖定變量
Application.Lock();
//為頁面訪問量+1
Application["StatCount"] = int.Parse(Application["StatCount"].ToString()) + 1;
//解鎖
Application.UnLock();
}

//鎖定變量
Session.Timeout = 10; //設定超時為10分鐘
Application.Lock();
Application["countSession"] = Convert.ToInt32(Application["countSession"]) + 1;  //訪問總?cè)藬?shù)+1
Application["onlineWhx"] = (int)Application["onlineWhx"] + 1; //在線人數(shù)加+1
Session["login_name"] = null;
//解鎖
Application.UnLock();
}

提醒一句,別忘了下面的代碼,以實現(xiàn)在用戶離線時,將在線人數(shù)減去1.

代碼如下:
void Session_End(object sender, EventArgs e)
{
// 在會話結(jié)束時運行的代碼。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式設置為 InProc 時,才會引發(fā) Session_End 事件。如果會話模式設置為 StateServer
// 或 SQLServer,則不會引發(fā)該事件。

//鎖定變量
Application.Lock();
Application["onlineWhx"] = (int)Application["onlineWhx"] - 1; //在線人數(shù)減-1
Session["login_name"] = null;
//解鎖
Application.UnLock();
}

三、將以上有關信息保存到數(shù)據(jù)庫IPStat

創(chuàng)建了一個獲取IP數(shù)據(jù)信息的類IPControl(),用來實現(xiàn)對數(shù)據(jù)庫IPStat數(shù)據(jù)的操作,關于IPControl()類的內(nèi)容,因為它是C#中對數(shù)據(jù)庫的操作,以解Sql server 數(shù)據(jù)庫,就能看懂它,這里就不作介紹了,請點擊該鏈接查看。

為了實現(xiàn)將用戶IP信息存入數(shù)據(jù)庫,在上面代碼中對IPControl()進行調(diào)用

代碼如下:
//保存IP信息到數(shù)據(jù)庫中
IPControl cont = new IPControl();
cont.AddIP(ipAddress, ipSrc, ipDatetime);

參數(shù)ipAddress為用戶IP,ipSrc為用戶來源, ipDatetime為用戶進入時間。

四、創(chuàng)建定時器,定時操作有關數(shù)據(jù)

對以上IPSta數(shù)據(jù)庫的數(shù)據(jù),需要創(chuàng)建一個或者幾個定時器,并在每天晚上24時前的10秒鐘內(nèi)統(tǒng)計一天的流量,然后將其刪除,把統(tǒng)計結(jié)果保存到另一個數(shù)據(jù)表中,供頁面顯示昨日訪問量是調(diào)用。定時器的創(chuàng)建和使用請點擊創(chuàng)建一個或者幾個定時器,供你參考。

以上不妥之處請批評指正。謝謝!

在ASP.net中網(wǎng)站訪問量統(tǒng)計方法—獲取IP數(shù)據(jù)信息的類

代碼如下:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;

///
/// 獲取IP數(shù)據(jù)信息的類
///
public class IPControl
{
//常量用來表示T-SQL語句中用到的變量名稱
private const string PARM_IP_ADDRESS = "@IPAddress";
private const string PARM_IP_SRC = "@IPSrc";
private const string PARM_IP_DATETIME = "@IPDateTime";
//T-SQL語句
private const string SQL_INSERT_IPSTAT = "INSERT INTO IPStat VALUES(@IPAddress,@IPSrc,@IPDateTime)";
private const string SQL_DELETE_IPSTAT = "delete from IPStat WHERE DATEDIFF(d,ip_datetime,getdate())>30"; //只保留一個月的數(shù)據(jù)
private const string SQL_SELECT_TOTAL = "SELECT COUNT(*) FROM IPStat ";
private const string SQL_SELECT_TODAY = "SELECT COUNT(*) FROM IPStat WHERE DATEDIFF(d,ip_datetime,getdate())=0";
private const string SQL_SELECT_YESTERDAY = "SELECT COUNT(*) FROM IPStat WHERE DATEDIFF(d,ip_datetime,getdate())=1";
private const string SQL_SELECT_MONTH = "SELECT COUNT(*) FROM IPStat WHERE DATEDIFF(d,ip_datetime,getdate())<30 and DATEDIFF(mm,ip_datetime,getdate())=0";

public IPControl()
{
}
///
/// 保存IP數(shù)據(jù)信息到數(shù)據(jù)庫
///
///
///
public void AddIP(string ipAddress,string ipSrc,DateTime ipDatetime)
{
//構(gòu)建連接語句字符串
StringBuilder strSQL = new StringBuilder();
//創(chuàng)建表示QQ號的參數(shù)
SqlParameter[] parms = new SqlParameter[] { new SqlParameter(PARM_IP_ADDRESS, SqlDbType.NVarChar, 20),
new SqlParameter(PARM_IP_SRC, SqlDbType.NVarChar,80),
new SqlParameter(PARM_IP_DATETIME, SqlDbType.DateTime)};
SqlCommand cmd = new SqlCommand();

// 依次給參數(shù)賦值,并添加到執(zhí)行語句中
parms[0].Value = ipAddress;
parms[1].Value = ipSrc;
parms[2].Value = ipDatetime;
foreach(SqlParameter parm in parms)
cmd.Parameters.Add(parm);

//定義對象資源保存的范圍,一旦using范圍結(jié)束,將釋放對方所占的資源
using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))
{
//在執(zhí)行字符串中加載插入語句
strSQL.Append(SQL_INSERT_IPSTAT);
conn.Open();

//設定SqlCommand的屬性
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = strSQL.ToString();
//執(zhí)行SqlCommand命令
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
//如果執(zhí)行成功,返回true,否則false。
}
}
public string GetTotal()
{
//調(diào)用SqlHelper訪問組件的方法返回第一行第一列的值
object count = SqlHelper.ExecuteScalar(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_TOTAL, null);
//返回統(tǒng)計結(jié)果
return count.ToString();
}
public string GetToday()
{
//調(diào)用SqlHelper訪問組件的方法返回第一行第一列的值
object count = SqlHelper.ExecuteScalar(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_TODAY, null);
//返回統(tǒng)計結(jié)果
return count.ToString();
}
public string GetYesterday()
{
//調(diào)用SqlHelper訪問組件的方法返回第一行第一列的值
object count = SqlHelper.ExecuteScalar(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_YESTERDAY, null);
//返回統(tǒng)計結(jié)果
return count.ToString();
}
public string GetMonth()
{
//調(diào)用SqlHelper訪問組件的方法返回第一行第一列的值
object count = SqlHelper.ExecuteScalar(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_MONTH, null);
//返回統(tǒng)計結(jié)果
return count.ToString();
}
}

在Global.asax中使用定時器來統(tǒng)計在線人數(shù)和每天每月的訪問量

一、在 Application_Start 中創(chuàng)建定時器

代碼如下:
//以下為使用多個定時器System.Timers.Timer的處理方法
//用thread重新包一下,定義兩個定時器
System.Threading.Thread myTimer_1 = new System.Threading.Thread(new System.Threading.ThreadStart(write_1));
myTimer_1.Start();
System.Threading.Thread myTimer_2 = new System.Threading.Thread(new System.Threading.ThreadStart(write_2));
myTimer_2.Start();

二、使用定時器每10分鐘更新一次在線人數(shù)檢查一次是否要存入一天流量的信息

代碼如下:
//使用第一個定時器,每10分鐘更新一次在線人數(shù)
private void write_1()
{
//以下使用System.Timers.Timer類 每間隔10分鐘存一次數(shù)據(jù)
System.Timers.Timer myTimer1 = new System.Timers.Timer(600000); //實例化Timer類,設置間隔時間為600000毫秒(10分鐘存一次總?cè)藬?shù));
myTimer1.Enabled = true; //是否執(zhí)行System.Timers.Timer.Elapsed事件;
myTimer1.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed); //到達時間的時候執(zhí)行事件myTimer_Elapsed;
myTimer1.AutoReset = true; //設置是執(zhí)行一次(false)還是一直執(zhí)行(true);
}
//使用第二個定時器,
private void write_2()
{
//以下使用System.Timers.Timer類 每間隔10分鐘檢查一次是否要存入一天流量的信息
System.Timers.Timer myTimer2 = new System.Timers.Timer(600000); //實例化Timer類,設置間隔時間為600000毫秒(10分鐘存一次總?cè)藬?shù));
myTimer2.Enabled = true; //是否執(zhí)行System.Timers.Timer.Elapsed事件;
myTimer2.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_peopleDay); //到達時間的時候執(zhí)行事件myTimer_peopleDay;
myTimer2.AutoReset = true; //設置是執(zhí)行一次(false)還是一直執(zhí)行(true);
}

三、創(chuàng)建 myTimer過程來處理在線人數(shù)和統(tǒng)計每日、月、年的流量

代碼如下:
//創(chuàng)建 myTimer_Elapsed 過程并定義第一個定時器事件,要用來處理在線人數(shù)的代碼
private void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//如果現(xiàn)在的在現(xiàn)人數(shù)大于原有的在現(xiàn)人數(shù),則替換數(shù)據(jù)表中的在現(xiàn)人數(shù)
int MaxOnline = Convert.ToInt32(Application["OnlineMax"]);
int MinOnline = Convert.ToInt32(Application["OnlineWhx"]);
if (MaxOnline < MinOnline)
{
SqlConnection con = Db.DB.createconnection();
con.Open();
SqlCommand cmd = new SqlCommand("update countpeople set totol='" + Application["countSession"].ToString() + "',OnLine=+'" + Application["onlineWhx"] + "',DataTimes='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'", con);
cmd.ExecuteNonQuery();
con.Close();
Application["OnlineMax"] = Application["OnlineWhx"]; //將現(xiàn)在線人數(shù)賦于OnlineMax
Application["dataTimes"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
else
{
//將總訪問人數(shù)寫入數(shù)據(jù)庫
SqlConnection con = Db.DB.createconnection();
con.Open();
SqlCommand cmd = new SqlCommand("update countpeople set totol=" + Application["countSession"].ToString(), con);
cmd.ExecuteNonQuery();
con.Close();
}
}
//創(chuàng)建 myTimer_peopleDay 過程并定義第二個定時器事件,要用來統(tǒng)計每日、月、年的流量
private void myTimer_peopleDay(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
//當天晚上24時
if (DateTime.Now.Hour == 23)
{
if (DateTime.Now.Minute >= 50)
{
//當天晚上24時,寫入一天的流量
//初始化一個iP數(shù)據(jù)訪問對象
IPControl cont = new IPControl();
//獲取今天訪問量
Int32 countToday = Convert.ToInt32(cont.GetToday());
//獲取本月訪問量
Int32 countMonth = Convert.ToInt32(cont.GetMonth());

//存儲過程名sp_InsertCountPeopleDay
SqlConnection con1 = Db.DB.createconnection();
con1.Open();
SqlCommand cmd1 = new SqlCommand("sp_InsertCountPeopleDay", con1);
cmd1.CommandType = CommandType.StoredProcedure; //存儲過程名

//調(diào)用并設置存儲過程參數(shù)
cmd1.Parameters.Add(new SqlParameter("@peopleDay", SqlDbType.Int));
cmd1.Parameters.Add(new SqlParameter("@dateTimes", SqlDbType.DateTime));

//給參數(shù)賦值
cmd1.Parameters["@peopleDay"].Value = countToday;
cmd1.Parameters["@dateTimes"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

cmd1.ExecuteNonQuery();
con1.Close();

//在一個月的最后一天寫入本月的訪問量
//取本月最后一天(30或者31日)
DateTime lastDay = Convert.ToDateTime(DateTime.Now.AddMonths(1).ToString("yyyy-MM-01")).AddDays(-1);
int lastDay1 = DateTime.Now.Day; //取當前時間的日期
if (lastDay1.ToString() == lastDay.ToString()) //如果前日期等于本月最后一天的日期,則前本月的流量寫入數(shù)據(jù)庫
{
SqlConnection conM = Db.DB.createconnection();
conM.Open();
SqlCommand cmdM = new SqlCommand("sp_InsertCountPeopleMonth", conM);
cmdM.CommandType = CommandType.StoredProcedure; //存儲過程名

//調(diào)用并設置存儲過程參數(shù)
cmdM.Parameters.Add(new SqlParameter("@peopleMonth", SqlDbType.Int));
cmdM.Parameters.Add(new SqlParameter("@dateTimeMonth", SqlDbType.DateTime));

//給參數(shù)賦值
cmdM.Parameters["@peopleMonth"].Value = countMonth;
cmdM.Parameters["@dateTimeMonth"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

cmdM.ExecuteNonQuery();
conM.Close();
}
}
}
}
catch
{

}
}

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

ASP.net中網(wǎng)站訪問量統(tǒng)計方法代碼

ASP.net中網(wǎng)站訪問量統(tǒng)計方法代碼:一、建立一個數(shù)據(jù)表IPStat用于存放用戶信息 我在IPStat表中存放的用戶信息只包括登錄用戶的IP(IP_Address),IP來源(IP_Src)和登錄時間(IP_DateTime),些表的信息本人只保存一天的信息,如果要統(tǒng)計每個月的信息則要保存一個月。因為我不太懂對數(shù)據(jù)日志的
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top 主站蜘蛛池模板: 精品日韩欧美 | 日韩免费一区二区三区 | 国产精品一区欧美日韩制服 | 国产精品一区二区国产 | 日本高清一二三区 | 亚洲成人精品 | 天天做天天爱夜夜爽毛片毛片 | 亚洲国产精久久久久久久 | 亚洲国产精品一区二区久 | 亚洲欧美精品成人久久91 | 手机国产精品一区二区 | 精品国产一区二区在线观看 | 欧美日韩国产色 | 一区二区国产在线观看 | 欧美日韩高清在线观看一区二区 | 日韩美一区二区 | 亚洲男同网站 | 中文字幕有码在线观看 | 欧美日韩综合网 | 精品日韩欧美一区二区三区 | 日韩a在线观看免费观看 | 日本久久精品免视看国产成人 | a天堂专区一区二区三区 | 婷婷久久综合 | 日韩欧美国产高清 | 国产成人精品一区二区 | 黄色视频毛片 | 91一区二区在线观看精品 | 久久精品亚洲欧美日韩久久 | 久久99久久99精品 | 欧美综合在线视频 | 高清不卡一区 | 欧美一区二区三区网站 | 欧美v视频 | 精品一区二区三区四区五区 | 久久久久国产成人精品亚洲午夜 | 亚洲国产日韩在线精品频道 | 欧美激情精品久久久久 | 久久久无码精品亚洲日韩按摩 | 久久亚洲精品国产精品777777 | 手机在线国产视频 |