2011-09-15 10 views
0

信頼できるユーザカウンタを実装したいと思います。現在、私はセッション変数を使用しています。ここで私の実装を見て:匿名ユーザとログインユーザのカウント -

void Application_Start(object sender, EventArgs e) 
{ 
    // Code that runs on application startup 
    Application["OnlineUsers"] = 0; 
    Application["LoggedInUsers"] = 0; 
} 

void Session_Start(object sender, EventArgs e) 
{ 
    // Code that runs when a new session is started 
    Application.Lock(); 
    Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1; 
    Application.UnLock(); 
} 

void Session_End(object sender, EventArgs e) 
{ 
    Application.Lock(); 
    if ((int)Application["OnlineUsers"] > 0) 
    { 
     Application["OnlineUsers"] = (int) Application["OnlineUsers"] - 1; 
    } 
    Application.UnLock(); 
} 

protected void Login1_LoggedIn(object sender, EventArgs e) 
{ 
    Application.Lock(); 
    Application["LoggedInUsers"] = (int)Application["LoggedInUsers"] + 1; 
    Application.UnLock(); 
} 

protected void LoginStatus1_LoggedOut(object sender, EventArgs e) 
{ 
    Application.Lock(); 
    if ((int)Application["LoggedInUsers"] > 0) 
    { 
     Application["LoggedInUsers"] = (int) Application["LoggedInUsers"] - 1; 
    } 
    Application.UnLock(); 
} 

このアプローチの欠点はよく知られています。私はもっ​​と正確なものを見つけることができませんでした。私を助けてくれますか?

答えて

0

Session_Endのややファジィな性質があるため、私が使用したアプローチは、直近の5分間にアクティビティを持つ人物として「オンラインユーザー」を定義することです。その時間枠内で活動しているユーザーの数を数えるだけです。

+0

私は知っていますが、匿名ユーザーをそのように数える方法はありますか? – Peter

+0

「アカウント」がないのに、匿名ユーザーに一意のセッションIDを与えることはできます。 – Larsenal

+0

あなたは私にそれをするためのヒントを教えてもらえますか? – Peter