ASP.NETを使用して、ユーザーがページを離れるときに常にサーバーサイドコードを実行する方法はありますか?

StackOverflow https://stackoverflow.com/questions/4679573

質問

ユーザーがASP.NETでページを残したときに、常にサーバーサイドコードを実行する方法があるかどうか疑問に思っていました。ページアンロードイベントは、誰かがリンクをクリックしても呼び出されないため、良くありません。理想的には、ユーザーがブラウザを閉じても、コードを実行したいと思います。

私が求めていることは不可能だと思いますが、尋ねるのは害はありません

役に立ちましたか?

解決

問題は、HTTPがステートレスプロトコルであるため、ページの提供が終了した場合、ユーザーがまだページ上にあるかどうかはわかりません。

これをacheiveする唯一の方法は、セッションIDまたは別の同様のメカニズムでサーバーを絶えずpingしているJavaScriptの隠された部分です。 pingが反応しなくなった場合、ページがユーザーによって表示されていないと合理的に想定できます。

これは、従来のHTTPメッセージフローを説明する図です。

alt text

他のヒント

あなたがそれをすることができるかどうかは本当にわかりませんが、私は回避策を念頭に置いています。 onbeforeunloadと呼ばれるイベントがDOMにあります。ユーザーがページを離れるたびに電話がかかります。この関数からサーバーにAJAXリクエストを送信してみてください。

あまりにも厄介な解決策を作成せずに来ることができる最も近いものは、ASPセッションを有効にすることです。これにより、クッキーによって識別される各訪問者のサーバー上のセッションが作成されます。

訪問者からの一定量の不活動の後、セッションは閉鎖され、セッションエンドイベントが発生します。これは、Global.asaxファイルに接続できます。

ただし、HTTPはPRであるため、これはお勧めしません。定義セッションのないプロトコル、およびサーバーベースのセッションを使用することはこの事実に違反し、多くの場合問題があります。サーバーベースのセッションを使用する多くのソリューションは、ユーザーがブラウザバックボタンを使用し、フォームを再提出するときに問題に直面します。提出されたフォームのコンテンツは、サーバーセッションに存在するデータに対応しなくなったためです。

また、サーバーベースのセッションを有効にすると、アプリケーションのスケーラビリティが深刻に損なわれます。

私が知っているわけではありません。そのためにJavaScriptを使用し、サーバー側のWebサービスを呼び出す必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top