2009-08-11 17 views
1

私はSession_endで実行する必要がある方法があります。ユーザーがブラウザを閉じたときにコードが実行されるようにする方法はありますか?これはダップクエストです。 1つのレスポンスがajaxのアンロードなどを呼び出すのがわかりましたが、ユーザーがページを閉じるたびにブラウザを終了するたびにこのメソッドを呼び出す必要はありません。ブラウザのSession_Endコードを閉じる

おかげで、〜CK

+2

ASP.NETセッションの状態は、ユーザーがブラウザを閉じるときとは関係ありません。 –

+3

Session_EndはIn-Procモードでのみ起動します。 – TWith2Sugars

答えて

2

単純な答え:あなたは、ユーザーのブラウザを制御することはできません。あなたが言及したAJAXソリューションは、プラグイン/カスタムクライアントなしで実現できる最も近いものです。ブラウザウィンドウを開いたり閉じたりするたびに、いくつかのWebサイトが追跡されるとします。それはプライバシーの問題ではないと思いますか?

真実はHTTPのステートレスな性質にあります。 Webサーバーは、クライアントへの応答の送信が終了するとすぐに画像から外れています。その後、クライアント側のスクリプト(クライアントが望んでいるために実行するだけで、スクリプトを実行しないことを簡単に選択できます)に依存することができます。

2

Session_endは信頼性がありません。あなたが何をしていても。

Session_endは、インプロセスセッションを使用しているときにのみ起動します。セッション・ステート・サーバーまたはSQLセッションを使用している場合、session_endは起動しません。

プロセスセッションを使用している場合、session_endはセッションに何かを格納している場合にのみ起動します。セッションを使用していない場合、session_endは決して起動しません。

セッションを使用しており、ユーザーがブラウザを閉じると、ユーザーセッションがタイムアウトするとsession_endが発生します。元のセッションと同じ設定がいくつかありますが、セッションタイムアウトを検出してsession_endプロセスを起動するのはワーカープロセスなので、このイベントはブラウザに関連付けられません。

+0

もしそうなら、ブラウザとサーバーの間にはありません。セッションが終了すると、近い将来、どこかで発生するSession_endに依存することができます。だから、私はカウンタの静的intを持っている場合、私はいくつのセッションがまだアクティブであるのかを数えることができます。 – Bergkamp

+0

そのカウンタは通常ハイ側にあります。これには、ブラウザを閉じたが、セッションのタイムアウトになっていないユーザーのセッションが含まれます。 –

+0

「ハイサイド」について説明してください。また、私は現在自分のサイトにチャットアプリケーションを構築しており、すべての名前とIDを取得できるように静的なユーザーリストを作成したいと考えています。だから、ちょっと後にユーザーがサインオフしたことを知ってもそれほど悪くはありません。いいえ? – Bergkamp