本质上,我希望能够在用户让其会话超时然后单击最终导致异步回发的事件时捕获。我想通了,如果我把这个代码我在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