質問

セッションタイムアウトイベントを処理できるかどうか疑問に思っています。セッションがタイムアウトする直前、またはユーザーがページを離れる直前、またはブラウザーウィンドウを閉じる前に、関数を呼び出す必要があります。ここで最も重要な部分は、セッション中に保存されているすべてのセッション変数にアクセスできることです。

役に立ちましたか?

解決

global.asaxのSession_End()メソッドを見てください。 global.asaxファイルは、セッションの終了時にこのメソッドを呼び出すように既に配線されている必要があります。好きなようにコードを入れることができます。

    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
        ' Fires when the session ends
    End Sub

もちろん、セッションは完全にサーバー側のものであることに注意してください。 X分間何も操作しないと終了します(20分がデフォルトです)。ユーザーがウィンドウを閉じてもすぐには終了しません。 ASP.NETは、ユーザーがウィンドウを閉じたり、ページを離れたりすることを知りません。

そして実際、これが起こったときにサーバー側で即座にアクションを実行しようとするのは難しいです。つまり、JavaScriptでwindow.onbeforeunloadを呼び出して、ユーザーがウィンドウを閉じる前に確認ボックスを表示するのは簡単です。しかし、ウィンドウが実際に閉じる直前にサーバーにパケットを送信しようとすると、これをすべてユーザーフレンドリーにするのは難しいタスクになると思います。ユーザーがブラウザを閉じていることをサーバーに通知するAJAXを使用してサーバーにメッセージを送信するJavascriptを記述し、そのメッセージの送信後にJavascriptを使用してブラウザーを閉じることができます。しかし、ユーザーは、スクリプトがウィンドウを閉じようとしていることを示す迷惑なメッセージ(ほとんどのブラウザー)を受け取ります。これは、ユーザーにとって非常にアマチュアっぽく見えるため、戻ってくることについて二度考えさせるかもしれません。

だから、もしあなたが遅延に耐えるつもりなら、私はこのJavascriptの混乱を完全に避け、Session_End()を使用する純粋なサーバー側のソリューションに頼るだけです。結局、ユーザーがウィンドウを閉じたり、離れたりすると、ASP.NETはセッションがタイムアウトするため、やがて通知します。

他のヒント

Session_endは、セッションタイムアウトの問題を処理します。ただし、ユーザーがブラウザーを閉じるか、別のURLに移動しても、これは起動しません。セッションのタイムアウトが期限切れになるまで待機します。

他の条件を検出するには、クライアントでjavascriptを使用する必要があります。ただし、ブラウザ/バージョンなどによっては、これらの方法が常に信頼できるとは限りません。また、ユーザーのコンピューターがシャットダウンしたり、プラグが抜かれたり、完全に消えたりした場合、このスクリプトは起動しません。

他の選択肢を検討するかもしれません。この機能で何を達成しようとしていますか?

ウェブはステートレスであるため、ユーザーがブラウザウィンドウを閉じたかどうかはわかりません。セッションのタイムアウトには、global.asaxファイルの「Session_End」イベントを使用できます。すべてのセッションにアクセスしたい場合は、「Session_Start」イベントを介して、グローバルファイルにもコレクションに保存できます。

編集:javascriptを使用してページのcloseイベントをインターセプトする場合の方法は次のとおりです(注意、これは信頼できません):

window.onbeforeunload = closeIt;

function closeIt(){ 


  return "You have unsaved changes. Are you sure you want to leave this page?";

}

すべてのaspxページ&によって継承されるベースページを持つことができます。基本ページのinitイベントで、セッション変数をチェックしてください。何も表示されていない場合は、セッションの有効期限が切れていることを意味し、ユーザーをログインページにリダイレクトできます。

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