ユーザーがASP.NETでページを離れるときに、サーバー側のコードを常に実行する方法があるかどうか疑問に思いました。ページのアンロードイベントは、誰かがリンクをクリックしても呼び出されないため、適切ではありません。理想的には、ユーザーがブラウザーを閉じてもコードを実行したいと思います。
私が求めていることは不可能だと思いますが、尋ねても害はありません
問題は、HTTPはステートレスプロトコルであるため、ページの提供が終了したときに、ユーザーがまだページにいるかどうかがわからないことです。
これを実現する唯一の方法は、セッションIDまたは別の同様のメカニズムでサーバーに絶えずpingを実行するJavascriptの隠し部分です。pingが応答しなくなった場合、ユーザーはそのページを表示しなくなったと合理的に判断できます。
これは、従来のHTTPメッセージフローを説明する図です。
あなたがそれを行うことができるかどうかは本当にわかりませんが、私は回避策を念頭に置いています。DOMにはonbeforeunloadというイベントがあります。ユーザーがページを離れるたびに呼び出しが発生します。この関数からサーバーにajaxリクエストを送信してみることができます。
面倒なソリューションを作成せずに実現できる最も近い方法は、ASPセッションを有効にすることです。これにより、訪問者ごとにサーバー上にセッションが作成され、訪問者はCookieによって識別されます。
訪問者から一定量の非アクティブ状態が発生すると、セッションが閉じられ、SessionEndイベントが発生します。これは、Global.asaxファイルに接続できます。
ただし、HTTPはprであるため、これはお勧めしません。セッションレスプロトコルの定義、およびサーバーベースのセッションの使用はこの事実に違反し、多くの場合問題があります。サーバーベースのセッションを使用する多くのソリューションでは、ユーザーがブラウザーの[戻る]ボタンを使用してフォームを再送信すると、問題が発生します。送信されたフォームのコンテンツは、サーバーセッションに存在するデータに対応しなくなったためです。
また、サーバーベースのセッションを有効にすると、アプリケーションのスケーラビリティが大幅に低下します。
私が知っていることではありません。そのためにjavascriptを使用し、サーバー側でWebサービスを呼び出す必要があります。