本質上,我希望能夠在用戶讓其會話超時然後單擊最終導致異步回發的事件時捕獲。我想通了,如果我把這個代碼我在session_start(Global.asax中),那麼我能趕上一個會話超時期間發生的回發:使用JavaScript處理asp.net中的會話超時
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不會寫入響應流。我確信應用程序中還有其他地方可以安全地將Javascript寫入響應,但我不能讓應用程序的其餘部分執行,因爲它會在嘗試訪問會話對象時發生錯誤。
綜上所述:我需要注入的JavaScript到Global.asax中在在session_start事件的響應
注意:您可能會奇怪,爲什麼我沒有這樣做,在Session_End中......我們不使用InProc會話,所以Session_End不會被調用...但這只是一個點...只是想澄清爲什麼我在Session_Start中這樣做。
感謝您的建議。你知道如何在不使用Response.Redirect()的情況下安全地重定向嗎?我問的原因是因爲當我們嘗試在AJAX回調期間執行Response.Redirect時(例如,當Page.IsCallBack爲true時)我們會遇到錯誤,並且在這段代碼中,我們通常只需要處理超時當它是一個回調。 – Adam 2009-12-21 19:18:15
一種方法是URL重寫,它通過調用context.RewritePath(newPath)來完成。另一個是Server.Transfer(newPath)。在進入頁面之前,RewritePath()最好,Server.Transfer()最好在此之後。 – RickNZ 2009-12-21 23:05:20
非常感謝! – Adam 2009-12-22 23:20:06