-1

ブラウザの終了をインターセプトし、メソッドを呼び出して、DB にログインしているユーザーに関するいくつかの情報でレコードを更新する方法を見つける必要があります。ユーザーがログアウトするとき、またはブラウザを閉じるときに、このレコードが更新されることが非常に重要です。明らかに、ユーザーが「ログアウト」をクリックすると、サーバー側のイベントで更新を処理しますが、ユーザーが単にブラウザーを終了するとどうなるでしょうか?

イベントを使用して、コードを実行するために何らかの WS または WebMethod を非同期呼び出しすることを誰かが提案してwindow.onbeforeunloadいますが、これはまったく納得できません。問題onbeforeunloadは、確認プロンプトが表示されることです。このメッセージを回避し、単純にメソッドを呼び出す必要があります。

そのため、ajax や JavaScript を使用しない「サーバー側」のソリューションがあるかどうか疑問に思っています。たとえば...セッションの放棄またはセッションのクリアで何らかのイベントをトリガーする方法、またはコードビハインドで作業するだけでこの問題を解決する他の方法...

4

6 に答える 6

0

はい、セッションの終了時に発生するイベントを Global.AsaX に入れることができます。データベースなどを更新するためにクライアントからのデータが必要な場合は、そこにデータを取得する方法が必要になりますが、そうでない場合は、 でうまくSession_Endいきます。

注: セッションの終了はブラウザーの終了とは少し異なるため、イベントの発生で何をしたいかによって異なります。

global.asax でセッション終了を処理するには?

于 2013-03-04T15:20:59.787 に答える
0

ajax や JavaScript を使用せずに「サーバー側」のソリューションを見つけたいと思います。

その要件では不可能だと思います。

たぶん、次のようなことができます:

  1. ページに非表示の IFRAME がある
  2. この IFRAME に Refresh ヘッダーを設定 (またはMETA要素を使用) して、数秒ごとにサーバーに接続します。
  3. クライアントからしばらく応答がない場合は、ブラウザが閉じられていると考えてください。

ただし、このソリューションはうまく拡張できないと思います。

于 2013-03-04T15:21:10.693 に答える
0

しばらくの間、私は自分の問題へのアプローチを根本的に変えました。保留中の行を更新するために、Quartz.NET フレームワークを使用して、毎晩実行される時限ジョブを実装しました。

于 2013-03-07T08:45:45.720 に答える
0

シグナルのようなものを考えましたか?誰かがレコードを開いていることを検出するために使用します。

public class ChatHub : Hub
{
     public override Task OnDisconnected()
     {
         Broadcaster.Disconnected(Context.ConnectionId);
         return base.OnDisconnected();
     }
}
于 2013-03-07T08:31:43.973 に答える