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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Asp.net在线统计人数

發布時間:2024/9/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asp.net在线统计人数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在設計網站時,網站被訪問情況和用戶使用情況是網站設計的一個重點。

?????????利用Application對象和Session對象可以統計當前在線用戶數量。下面分別介紹這兩個對象。

????????(1)Application對象是HttpApplication類的實例。它可以在多個請求、連接之間共享公用信息,也可以在各個請求連接之間充當信息傳遞的管道。此對象的生命周期起始于IIS開始運行并且有人開始連接時,終止于IIS關閉或者若干時間內無人連接時。當Application對象的生命周期開始時,Application_Start事件會被啟動,當Application對象的生命結束時,Application_End事件會被啟動。本實例中,當應用程序啟動時,在Application_Start事件下初始化計數器。其代碼如下。

???????????? //?在應用程序啟動時運行的代碼????????????????????

??????????? ?//初始化????????????????????

???????????? ?Application["counter"]?=?0;?

???????(2)Session對象是System.Web.UI.HttpSessionState類的實例。Session對象的所有引用都是在引用當前用戶的會話對象,這個對象提供了字典風格的訪問機制,當特定的用戶不再訪問Web站點上的頁面時,一些信息將被丟掉。在新會話啟動時,使計數器自增。但是注意的是只有在Web.config文件中的sessionstate模式設置為InProc時,才會引發Session_End事件。如果會話模式為StateServer或SQLServer,則不會引發該事件。關鍵代碼如下。

???????????????? ?//?在新會話啟動時運行的代碼????????????????????

????????????????? //對Application加鎖以防并行性????????????????????

????????????????????????????Application.Lock();????????????????????

????????????????? //增加一個在線人數????????????????????

????????????????????????????Application["counter"]?=?(int)Application["counter"]?+?1;????????????????????

????????????????????????????Application.UnLock();?????//解鎖????????????????????????????在會話結束時,使計數器自減。關鍵代碼如下。????????????????????????????????????????????????????????Application.Lock();????????????????????

????????????????????????????//減少一個在線人數????????????????????

????????????????????????????Application["counter"]?=?(int)Application["counter"]?-?1;????????????????????

????????????????????????????Application.UnLock();????????//解鎖??????????????????????????????

?注意:

????????(1)在會話開始和結束時,一定要進行加鎖(Application.lock)和開鎖(Application.Unlock)操作。由于多個用戶可以共享Application對象,因此對共享資源使用鎖定是必要的,這樣可以確保在同一時刻只有一個客戶可以修改和存取Application對象的屬性。如果將共享區加鎖后,遲遲不給開鎖,可能會導致用戶無法訪問Application對象。用戶可以使用該對象的Unlock方法來解除鎖定。這樣可以保證在沒有程序訪問的情況下允許有一個客戶可以使用Application對象的共享區。

????????(2)本實例主要是根據用戶建立和退出會話來實現在線人數的增加、減少的,如果用戶沒有關閉瀏覽器,而直接進入其他URL,則這個會話在一定時間內是不會結束的,所以對用戶數量的統計存在一定的偏差。當然,用戶可以在Web.config文件中對會話Session的失效時間Timeout來設置,默認值為20分鐘,最小值為1分鐘。

實現過程

(1)新建一個網站,命名為Ex11_06,默認主頁名為Default.aspx。

(2)然后在該網站中添加一個Global.asax全局應用程序文件。

???????(3)主要程序代碼。

Global.asax文件代碼如下:

<%@ Application Language="C#" %>

<script RunAt="server">

??? void Application_Start(object sender, EventArgs e)

??? {

??????? // 在應用程序啟動時運行的代碼

??? }

??? void Application_End(object sender, EventArgs e)

??? {

??????? //? 在應用程序關閉時運行的代碼

??????? Application["count"] = 0;

??? }

??? void Application_Error(object sender, EventArgs e)

??? {

??????? // 在出現未處理的錯誤時運行的代碼

??? }

??? void Session_Start(object sender, EventArgs e)

??? {

??????? // 在新會話啟動時運行的代碼

??????? //對Application加鎖以防并行性????????????????????

??????? Application.Lock();

??????? //增加一個在線人數????????????????????

??????? Application["counter"] = (int)Application["counter"] + 1;

??????? //解鎖????????????????????

??????? Application.UnLock();????????????????????

??? }

??? void Session_End(object sender, EventArgs e)

??? {

??????? // 在會話結束時運行的代碼。

??????? // 注意: 只有在 Web.config 文件中的 sessionstate 模式設置為

??????? // InProc 時,才會引發 Session_End 事件。如果會話模式設置為 StateServer

??????? // 或 SQLServer,則不會引發該事件。

??????? //對Application加鎖以防并行性????????????????????

??????? Application.Lock();

??????? //減少一個在線人數????????????????????

??????? Application["counter"] = (int)Application["counter"] - 1;

??????? //解鎖????????????????????

??????? Application.UnLock();????????????????????

??? }

</script>

頁面后臺代碼如下:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

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

頁面前臺代碼:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Demo._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
??? <title>無標題頁</title>
</head>
<body>
??? <form id="form1" runat="server">
??? <div>
??????? <asp:Label ID="Label1" runat="server" Text="Label" Width="128px"></asp:Label></div>
??? </form>
</body>
</html>

總結

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

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