global.asaxファイルのイベントは次のように記述されます。
protected void Session_End(Object sender, EventArgs e)
{
var x = 5;
}
クライアントがウィンドウを閉じてもコードがそこに到達しないのはなぜですか?
global.asaxファイルのイベントは次のように記述されます。
protected void Session_End(Object sender, EventArgs e)
{
var x = 5;
}
クライアントがウィンドウを閉じてもコードがそこに到達しないのはなぜですか?
クライアントがウィンドウを閉じたときにコードがそこに到達しないのはなぜですか?
このイベントは、クライアントがブラウザを閉じたときに呼び出されることが想定されていないためです。このイベント (その名前が示すように) は、セッションの有効期限が切れたときに呼び出されることを目的としています。デフォルトのセッション有効期限のタイムアウトは 20 分であるため、このイベントはクライアントがブラウザを閉じてから 20 分後に呼び出されます。
ああ、知っておくべき非常に重要な問題があります。アウトプロセス セッション状態モード (StateServer や SqlServer など) を使用している場合、このイベントは呼び出されません。
PS:Session_End
イベントはInProc
セッション マネージャーによってのみサポートされます。
セッションの有効期限が切れると呼び出されます。
ページが閉じているとき、またはドキュメントがアンロードされているときに、 onbeforeunloadである javascript 関数を使用する必要があると思います。その関数では、クライアントがウィンドウを閉じていることを示す ajax 要求をサーバーに送信します。メソッドがクライアント側に登録されているため、悪意のあるユーザーは ajax リクエストを変更できます (それを防ぐことさえできます)。セキュリティの問題を考慮しない場合は、問題ありません。頑張ってください。