5

サイトに現在オンラインのユーザー数を常に表示する必要があります。たとえば、「現在オンラインのユーザーは 35741 人」です。これはログインに基づくものではなく、現在サイトにいるユーザーの数に基づいています。これにはセッション開始/セッション終了を使用してみましたが、セッション終了は信頼できません。したがって、セッションの開始時に数値が追加されますが、セッションの終了時に発火しないため、それらが削除されないため、数値が膨らみます。

ここから追加情報 (レポートなど) を収集する必要はありません。番号を表示するように要求するだけです。非常に単純な要求が大きな取引に変わりつつあります。どんな助けでも大歓迎です。

編集:

このためにデータベースも使用してみたことを明記しておく必要があります。セッション ID と最後のアクティビティ列を含む単純なテーブル。ページにヒットするたびに、セッションがデータベースにあるかどうかを確認します。そうでない場合は、挿入します。もしそうなら、活動時間で更新してください。次に、データベースを一掃して、過去 20 分間にアクティビティのないセッションを探す手順を実行します。このアプローチは、私の SQL サーバーや IIS を強制終了したようです。サイトを再起動する必要がありました。

4

7 に答える 7

8

最善の方法はあなたと同じですが、アクティビティでタイムアウトします。特定のセッションが 5 分程度以内にページにアクセスしない場合、そのセッションはアクティブではないと見なすことができます。

于 2009-11-30T22:41:15.580 に答える
3

ASP.Net メンバーシップを使用している場合は、GetNumberOfUsersOnlineをご覧ください。

于 2009-11-30T22:48:57.017 に答える
2

記録できるすべてのユーザー アクションについて、特定の時間枠で「オンライン」と見なす必要があります。サイトによっては、5 分に設定することもできます。実際の Web リクエストには 1 秒もかかりません。ユーザーがそのページに留まり、オンラインとみなされるだけで何もしない期間について、ある程度の想定を立てる必要があります。

このアプローチでは、各ユーザーの最後のアクティビティの時間を追跡する必要があります。

于 2009-11-30T22:43:01.350 に答える
2

パフォーマンス カウンターを使用します。

  • State Server Sessions Active : アクティブなユーザー セッションの数。
于 2009-11-30T22:43:48.897 に答える
0

シルキーが彼の答えで言ったことを拡張します-実際にはhttpはユーザーが現在「オンライン」であるかどうかを判断するためにステートレスであるため、ユーザーが最後にサイトにアクセスしてからの経過時間のみを追跡し、リクエスト間の時間を決定することができます。活動する。

これはログインしているユーザーに基づいていないと述べたので、過去 5 分間 (または「オンライン」タイムアウトと見なされる長さ) にリクエストを受信した異なる IP アドレスの数が単純である可能性があります。

于 2009-11-30T22:51:33.513 に答える
0

ユーザーがログインすると、ユーザー名が HttpContext.Current.Cache にスライド式の有効期限 (たとえば 20 分) で書き込まれます。

次に、Application_PreRequestHandlerExecute の Global.asax.cs で、現在のユーザーのキャッシュ エントリを「タッチ」して、スライド有効期限をリセットします。

ユーザーが明示的にログアウトする場合、HttpContext.Current.Cache からユーザー名を削除します。

これを行うと、いつでも HttpContext.Current.Cache.Count によって現在のユーザー数が得られます。

注: これは、キャッシュを他の目的で使用していないことを前提としています。

于 2011-02-03T20:03:55.300 に答える