1. 原則 .net の global.asax には、aspx ファイルがアクセスされるたびにトリガーされる Application_AuthenticateRequest イベントと Application_BeginRequest イベントがあります。ただし、Application_BeginRequest は、FROMS 認証を受けた ID チケットを識別できません。したがって、Application_AuthenticateRequest にのみ配置できます。
私の実装原則は、aspxファイルにアクセスするたびに、オンラインテーブルにこのユーザーが存在するかどうかを判断し(ユーザー名はログイン済み、IPアドレスはログインしていません)、存在しない場合は次のとおりです。 、ユーザーの ID、そして最後に、アクセス時刻、最後にアクセスした IP、および最後にアクセスした URL がデータベースに保存されます。すでにデータベースに存在する場合は、レコードを更新し、最終アクセス時刻、IP、および最終アクセス URL を更新します。
同時に、現在時刻から 20 分以上離れたデータベース内のデータを削除します (20 分間何も操作しないとタイムアウトとみなされます)。
2. 利点: 現在オンライン中の正確な人数を確認できるだけでなく、誰がオンラインであるか、ログインしているかどうか、メンバーである訪問者の割合、およびその場所を把握し、オンライン上の人数を計算することもできます。とあるページです。
3. データベース構造:
主キーフィールドのタイプの長さ (空かどうか)
1uson_serialint40 シリアル番号
0uson_uservarchar200 ユーザー名 (ログインしていない場合は IP)
0uson_companyvarchar1000 会社名 (ログインしていない場合は「訪問者」)
0uson_ip varchar200IP アドレス
0uson_datedatetime80 最終操作時間
0uson_urlvarchar1000 最後の操作ページのパス
4. プログラムのメモ:
1. プログラムは global.asax にあります。
2.FORMS認証を使用しています。
3. System.Web.Security
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
を使用してください。
{
文字列strUserID = string.Empty;
文字列strCompany = string.Empty;
if (Request.IsAuthenticated)
{
FormsIdentity アイデンティティ = (FormsIdentity)User.Identity;
FormsAuthenticationTicket チケット = ID.Ticket;
strUserID = ユーザー.Identity.Name;
strCompany = ticket.UserData.Split("|".ToCharArray())[2];
}
それ以外
{
strUserID = リクエスト.ユーザーホストアドレス;
strCompany = "訪問者";
MemberOnlineInfo
objOnline = new MemberOnlineInfo(strUserID, Request.UserHostAddress, DateTime.Now.ToString(), Request.FilePath, strCompany)
;
if (!account.CheckUserOnline(strUserID))
account.AddOnline(objOnline);
それ以外
account.UpdateOnline(objOnline);
//タイムアウトしたメンバーを削除します
account.DeleteOnline();
}