【问题标题】:Handle session timeout in asp.net using Javascript使用 Javascript 在 asp.net 中处理会话超时
【发布时间】:2009-12-18 22:02:21
【问题描述】:

本质上,我希望能够捕捉到用户何时让他们的会话超时,然后单击最终导致异步回发的内容。我发现如果我把这段代码放在我的 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 中这样做。

【问题讨论】:

    标签: asp.net javascript session response httpresponse


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的建议。您知道不使用 Response.Redirect() 安全重定向的方法吗?我问的原因是因为每当我们尝试在 AJAX 回调期间执行 Response.Redirect 时(例如,当 Page.IsCallBack 为 true 时)都会遇到错误,并且在这部分代码中,我们通常只需要处理超时当它是一个回调。
    • 一种方法是 URL 重写,通过调用 context.RewritePath(newPath) 来完成。另一个是 Server.Transfer(newPath)。 RewritePath() 最好在你到达页面之前,Server.Transfer() 最好在那之后。
    猜你喜欢
    • 2016-03-27
    • 1970-01-01
    • 2011-01-18
    • 2011-01-01
    • 2017-10-06
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    相关资源
    最近更新 更多