0

基本的に、ユーザーがセッションをタイムアウトさせてから、非同期ポストバックを引き起こす何かをクリックしたときにキャッチできるようにしたいと考えています。このコードを Session_Start (Global.asax 内) に配置すると、セッション タイムアウト中に発生したポストバックをキャッチできることがわかりました。

    With HttpContext.Current
        If TypeOf .Handler Is Page Then
            Dim page As Page = CType(.Handler, Page)
            If page IsNot Nothing AndAlso page.IsPostBack Then
                'Session timeout
            End If
        End If
    End With

これはうまくいきます。私の質問は、アプリケーションの残りの部分が実行を終了しないように、Response に JavaScript を挿入してから Response.End() を呼び出すことができるようにしたいということです。問題は、Response.Write("<script ... ")フォローしようとするとResponse.End()、javascript が応答ストリームに書き込まれないことです。アプリケーションには、Response に Javascript を安全に書き込むことができる場所が他にもあると確信していますが、セッション オブジェクトにアクセスしようとするとエラーが発生するため、アプリケーションの残りの部分を実行させることはできません。

要約すると、Global.asax の Session_Start イベントの応答に JavaScript を挿入する必要があります。

注: なぜ Session_End でこれを行わないのか疑問に思われるかもしれません... InProc セッションを使用しないため、Session_End は呼び出されません... しかし、それは要点の横にあります... 明確にしたかっただけですなぜSession_Startでこれを行っているのですか。

4

1 に答える 1

1

HttpHandler の外部で応答ストリームに書き込むことは、通常はお勧めできません。いくつかのまれなケースではうまくいくかもしれませんが、物事が意図されている方法ではありません。

これを行うためにページ基本クラスまたはページ アダプターの使用を検討しましたか? そうすれば、必要なコードのコピーは 1 つだけで、すべてのページまたは選択したページだけに適用できます。

もう 1 つのオプションは、URL 書き換えを使用して、必要なスクリプト出力を生成するページに着信要求をリダイレクトすることです。

于 2009-12-19T00:41:59.893 に答える