基本上我希望能够在用户让会话超时然后点击最终导致异步回发的内容时捕获。我想通过,如果我将此代码放入我的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
这很好用。我的问题是,我希望能够在响应中注入一些javascript,然后调用Response.End(),以便应用程序的其余部分无法完成执行。问题是,当我尝试Response.Write("<script ... ")
后跟Response.End()
时,javascript不会被写入响应流。我确信在应用程序中还有其他地方我可以安全地将Javascript写入响应但我不能让应用程序的其余部分执行,因为它在尝试访问会话对象时会出错。
总结一下:我需要在Global.asax中的Session_Start事件中将javascript注入响应
注意:您可能想知道为什么我在Session_End中没有这样做...我们不使用InProc会话,因此Session_End不会被调用...但是这不是重点...只是想要明确我为什么要在Session_Start中这样做。
答案 0 :(得分:1)
写入HttpHandler之外的响应流通常不是一个好主意;它可能适用于某些极端情况,但事情并非如此。
您是否考虑过使用Page基类或页面适配器来执行此操作?这样,您只需要一份代码副本,它可以应用于所有页面或仅应用于您选择的页面。
另一种选择是使用URL重写将传入请求重定向到生成所需脚本输出的页面。