2011-04-27 15 views
0

私はASP.Net 3.5 C#を使用してWebサイトを開発しています。私は自分のサイトにすべてのオンラインユーザー(自分のサイトにログインしているユーザー)をリストしています。ユーザーがログアウトしたときや単にブラウザを閉じたときや他のサイトに移動したときにデータベースのユーザーのステータスを追跡して更新したい。これらのすべてのケースで、ユーザーのステータスを「ログアウト」として更新したいと考えています。セッションタイムアウト

どうすれば前進できますか?ユーザーがボタンをクリックすると

おかげで のVivek

+0

サーバーサイドコードを実行するための「ユーザークローズブラウザー」イベントはありません –

答えて

0

、あなただけ(コードビハインドで)サーバ側のクリックイベントを処理して、ステータスの変更をログに記録することができます。

public void Session_End(object sender, EventArgs e) 
{ 
    // Fires when the session ends 
} 
+0

私はあなたの答えに同意しません。これは、SQL ServerやState Serverのようなセッションモードでは可能でしょうか?そして、一方で、私は決してブラウザを閉じることがSession.Endイベントを引き起こすと聞いたことがありません。 –

+0

@MatíasFidemraizer - 良い点re:Session_Endイベント。すべてのセッションモードで動作するわけではありません。あなたの2番目の声明に関して、私は決してブラウザを閉じるとイベントを引き起こすとは言いませんでした。 Session_Endは、セッションが終了すると起動します。ブラウザが閉じられた後、またはブラウザが開いたままになってユーザがサイトを離れるなどの場合に発生します。 –

+0

私は理解しています:) Understood –

0

正当なログアウト(つまりログアウトをログアウトボタンなどをクリックして:セッションが終了したときにブラウザを閉じた場合のために

、あなたは発火のglobal.asaxでのSession_Endイベントを処理することができます。)を簡単に追跡することができます。イベントを処理し、データベースのステータスをログアウトしておく必要があります。

しかし、ブラウザを閉じることは決してうまくいったことではありません。あなたはクローズボタンをキャプチャし、次にajaxリクエストなどを伝えるようなWeb上で多くのソリューションを手に入れることができますが、私はそれで成功しませんでした。

(Session_Endのようなものは便利かもしれませんが、信頼できないIN-PROCセッションモード以外のものを使用している場合はthiseventが起動しないというGotchaがあります)。

0

ユーザーがブラウザを閉じたかどうか、または別のサイトに移動したかどうかはわかりません。私は、ユーザーがあなたのサイトを見ていることを確認するために、一定の時間間隔でいくつかのメッセージをサーバーに送信する何らかのAJAXコントロールを使用する必要があると思います。

0

まずこの他の質問に私の答えをチェックしてください、いくつかのユーザーがブラウザを閉じた場合は、すぐにセッションを閉じて、この変更を追跡することができません

シャットダウンコンピュータまたはそのようなものです。これは、セッションタイムアウトで再生することで実現されます。

サーバーロジックに実装される時間間隔でサーバーに対して何らかの操作がトリガーされた場合、別の可能性も考えられます。

ログアウトは、「人間のユーザ」アクションであるため、追跡する必要があります。あなたの認証マネージャークラス、またはそこでの認証とトラックログアウトを扱う他のクラスで、 "UserLogout"イベントを実装するだけです。

技術面での制限があるため、この領域にはAPIがないため、他のページへの参照やWebブラウザのクロージャなどのクライアント側のユーザー操作は追跡できません。 Webパラダイムとその原則のせいでますますです。あなたはそれを見逃す必要があります。

関連する問題