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 不会被写入响应流。我确信应用程序中还有其他地方可以安全地将 Javascript 写入响应,但我不能让应用程序的其余部分执行,因为它在尝试访问会话对象时会出错。

总结一下:我需要在 Global.asax 的 Session_Start 事件的响应中注入 javascript

注意:您可能想知道为什么我不在 Session_End 中执行此操作...我们不使用 InProc 会话,因此不会调用 Session_End...但这无关紧要...只是想弄清楚为什么我在 Session_Start 中这样做。

4

1 回答 1

1

在 HttpHandler 之外写入响应流通常不是一个好主意。它可能在某些极端情况下起作用,但这不是事情的预期工作方式。

您是否考虑过使用 Page 基类或 Page Adapter 来执行此操作?这样,您只需要一份代码副本,它可以应用于所有页面或仅应用于您选择的页面。

另一种选择是使用 URL 重写将传入请求重定向到生成所需脚本输出的页面。

于 2009-12-19T00:41:59.893 回答