ASP.Net 3.5 C#を使用してWebサイトを開発しています。私のサイトのすべてのオンラインユーザー(私のサイトに再ログインしたユーザー)を一覧表示しています。ユーザーがログアウトしたとき、または単にブラウザーを閉じたとき、または他のサイトに移動したときに、データベース内のユーザーのステータスを追跡および更新したいと思います。これらすべての場合で、ユーザーのステータスを「ログアウト」として更新したいと思います。
どうすればそれを進めることができますか。
ありがとうVivek
ユーザーがボタンをクリックすると、サーバー側(コードビハインド)でクリックイベントを処理し、ステータスの変更をログに記録できます。
ブラウザが閉じている場合は、global.asaxでSession_Endイベントを処理できます。このイベントは、セッションが終了したときに発生します。
public void Session_End(object sender, EventArgs e)
{
// Fires when the session ends
}
正当なログアウト (ログアウト ボタンのクリックによるログアウトなど) は簡単に追跡できます。イベントを処理し、データベースのステータスがログアウトされていることをマークするだけです。
ただし、ブラウザーを閉じることは、私が成功したことがないことの 1 つです。閉じるボタンをキャプチャしてからajaxリクエストなどをキャプチャするように指示する多くのソリューションをWeb経由で取得しますが、私はそれで成功しませんでした。
(Session_End のようなものは便利かもしれませんが、IN-PROC セッション モード以外を使用している場合、このイベントが発生しないという問題があるため、信頼できません)。
ユーザーがブラウザを閉じたかどうか、または別のサイトに移動したかどうかはわかりません。ユーザーがサイトを閲覧していることを確認するために、特定の時間間隔でサーバーにいくつかのメッセージを送信する、ある種の AJAX コントロールを使用する必要があると思います。
まず、この他の質問で私の答えを確認してください:
一部のユーザーがブラウザーを閉じたり、コンピューターをシャットダウンしたりした場合、セッションをすぐに閉じてこの変更を追跡することはできません。これは、セッション タイムアウトをいじることによって実現されます。
もう 1 つの可能性は、ある時間間隔でサーバーに対して何らかの操作をトリガーした場合、ユーザーがオンラインであると見なすことができます。これは、サーバー ロジックに実装されます。
ログアウトは「人間のユーザー」のアクションであるため、簡単に追跡できる必要があります。認証マネージャークラスまたは認証を処理する他のクラスに「UserLogout」イベントを実装し、そこでログアウトを追跡するだけです。
別のページの閲覧や Web ブラウザの終了などのクライアント側のユーザー アクションは、テクノロジの制限により追跡できません。API がこの領域にないためです。それは、Web パラダイムとその原則によるものです。あなたはそれを見逃す必要があります。