日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net如何统计在线人数

發布時間:2023/12/13 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net如何统计在线人数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

統計在線用戶的作用不言而喻,就是為了網站管理者可以知道當前用戶的多少,然后根據用戶數量來觀察服務器或者程序的性能,從而可以直觀的了解到網站的吸引力或者網站程序的效率現在,我們就介紹一個簡單明了的方法來統計在線用戶的多少,該方法的特點就是充分的利用了ASP.NET的特點,結合global.asax文件,用Application和Session巧妙的實現在線用戶的統計,由于程序中只用到一個Application,所以,程序占用系統資源幾乎可以忽略不及,當然,這也是網站管理者最關心的問題之一

一用戶顯示頁面的使用?

首先,我們來看看怎樣現實當前網站的訪問用戶數量,程序代碼如下:?


<%@ Page Language= "c# " debug= "true " %>?
<html>?
<head>?
<SCRIPT LANGUAGE= "c# " RUNAT= "server ">?
private void Page_Load(object sender, System.EventArgs e)?
{?
Visitors.Text = "本站當前有: <b> " + Application[ "user_sessions "].ToString() + " " + "</b> 位訪問者 ! ";?
}?
<title>在線用戶</title>?
</head>?
<body>?
<asp:label " runat= "server " /><br>?
</body>?
</html>?

可以看出,以上的程序特別簡單,就是調用Application當然,我們不必要專門設計一個頁面來顯示在線用戶數量,在網站的任何頁面,我們都可以直接調用Application( "user_sessions ").ToString()來顯示當前用戶數量?

二global.asax文件實現?

global.asax文件的作用我們自不必說,現在,我們直接來看統計當前在線用戶數量如何實現:?


<script language= "c# " runat= "Server ">?
protected void Application_Start(Object sender, EventArgs e)?
{?
Application[ "user_sessions "] = 0;?
}?
protected void Session_Start(Object sender, EventArgs e)?
{?
Application.Lock();?
Application[ "user_sessions "] = (int)Application[ "user_sessions "] + 1;?
Application.Unlock();?
}?
protected void Session_End(Object sender, EventArgs e)?
{?
Application.Lock();?
Application[ "user_sessions "] = (int)Application[ "user_sessions "] - 1;?
Application.Unlock();?
}?
</script>?

以上代碼很容易理解,當網站開始服務的時候(Application開始的時候),程序設置Application[ "user_sessions "]為零,然后,當用戶進入網站(Session開始的時候)的時候,鎖定Application,然后,將application( "user_sessions ")加一,用戶退出網站的時候,application( "user_sessions ")減一這樣,就很巧妙的實現了在線用戶的統計?

三一點討論?

以上的統計,簡明扼要,程序很容易實現但是,如果我們仔細考慮,發現該方法有一定的局限,統計出來的在線用戶數量可能稍微有點誤差因為我們在以上程序中,是根據用戶建立和退出會話(Session)來實現在線人數的加減的,而我們知道,如果用戶沒有關閉瀏覽器,而進入另外一個網站,那么,這個會話在一定的時間內是不會結束的,這個時間我們可以通過TimeOut來設置,一般的,我們設置為20分鐘所以,在用戶數量統計上面,還是存在一點誤差的?

另外,我們知道,在ASP中,如果用戶將瀏覽器上面的Cookies設置為禁用,那么,Session就不能再被傳遞,顯然,這樣設置讓以上的統計程序無能為力不過,在ASP.NET中我們有解決方法,在config.web文件中,我們將<sessionstate cookieless= "false " />設置為true就可以了,也就說,不使用Cookies也可以傳遞Session這樣,我們的程序就可以在不同的訪問者環境中順利運行?

準備工作
1、新建一個TongJi 的數據庫,添加一個 tongji 的表,在表中有一個 Number 的字段,為 int 類型,Numger初值為1000;
2、新建一個網站;
3、新建數據庫連接字符串(具體方法)并將其保存到Web.config 文件中, <connectionString>節的代碼如下:?

<connectionStrings>
??????????? <add name="TongJiConnectionString" connectionString="Data Source=.;Initial Catalog=TongJi;Integrated Security=True" providerName="System.Data.SqlClient"/>
??????? </connectionStrings>

關鍵代碼?
4、添加新項/全局應用程序類:Global.asax ,其文件的全部代碼如下:




<%@ Application Language="C#" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">

??????? void Application_Start(object sender, EventArgs e)?
??????? {
??????????? // 在應用程序啟動時運行的代碼?????????
??????????? SqlConnection con = new SqlConnection();
??????????? con.ConnectionString = ConfigurationManager.ConnectionStrings["TongJiConnectionString"].ConnectionString;
??????????? con.Open();
??????????? SqlCommand cmd = new SqlCommand("select * from tongji", con);
??????????? int count = Convert.ToInt32(cmd.ExecuteScalar());
??????????? con.Close();
??????????? Application["total"] = count;
??????????? Application["online"] = 0;
??????? }
????
??????? void Application_End(object sender, EventArgs e)?
??????? {
??????????? //????? 在應用程序關閉時運行的代碼
??????????? SqlConnection con = new SqlConnection();
??????????? con.ConnectionString=ConfigurationManager.ConnectionStrings["TongJiConnectionString"].ConnectionString;
??????????? con.Open();
??????????? SqlCommand cmd = new SqlCommand("update tongji set Number=" + Application["total"].ToString(), con);
??????????? cmd.ExecuteNonQuery();
??????????? con.Close();
??????? }
????????
??????? void Application_Error(object sender, EventArgs e)?
??????? {?
??????????? // 在出現未處理的錯誤時運行的代碼
??????? }

??????? void Session_Start(object sender, EventArgs e)?
??????? {
??????????? // 在新會話啟動時運行的代碼
??????????? Application.Lock();
??????????? Application["total"] = (int)Application["total"] + 1;
??????????? Application["online"] = (int)Application["online"] + 1;
??????????? Application.UnLock();
??????? }

??????? void Session_End(object sender, EventArgs e)?
??????? {
??????????? // 在會話結束時運行的代碼。?
??????????? Application.Lock();
??????????? Application["online"] = (int)Application["online"] - 1;
??????????? Application.UnLock();
??????? }
???????
</script>


運行測試
5、拖兩個Lable 到 Default.ASPx????? 上;
6、其Default.ASPx.cs 代碼如下:

public partial class _Default : System.Web.UI.Page?
{
??????? protected void Page_Load(object sender, EventArgs e)
??????? {
??????????? this.Label1.Text = "總訪問人數" + Application["total"].ToString();
??????????? this.Label2.Text = "當前在線數" + Application["online"].ToString();
??????? }
}


7、OK!!啟動調試。

注意事項

8、
????????? 我在VS2005中調試進行時,顯示:總訪問人數為1001;當前在線數1當;
????????? 我重新打開另外一個IE,并把地址Copy過去,這時顯示:總訪問人數為1002;當前在線數2;
????????? 這說明一切正常。但數據庫中仍然為1000,??????
????????? 我就是在這里讓耽誤了很多的時間(一天),但在我絕望時,我多試了一次,
????????? 然而,這一次上天意給了我意外的恩賜。

????????? 這時,我在VS2005中,"文件"菜單,選擇“保存Global”;
????????? 此時,數據庫中的1000才更新為1002。
????????? 如果在I I S 中調試也一樣,要正常關機或停掉WWW服務才將數據一性寫進數據庫。

轉載于:https://www.cnblogs.com/wdpp/archive/2010/03/30/2386977.html

總結

以上是生活随笔為你收集整理的.Net如何统计在线人数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。