【问题标题】:What is the most efficient way to handle en expired session with ASP.NET 2.0使用 ASP.NET 2.0 处理过期会话的最有效方法是什么
【发布时间】:2010-09-17 02:43:15
【问题描述】:

在我们正在建设的网站上。我们需要能够在用户会话结束时将用户重定向到默认页面。

乍一看,我们使用带有 Response.Redirect 的 Session_End 来完成这项工作。

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
    Response.Redirect("~/global/exit.aspx")
End Sub

但它会产生大量 Response is not available in this context 错误。自然,我们不想向我们的服务器错误日志发送垃圾邮件。

处理以 ASP.NET 2.0 结束的会话最有效的方法是什么?

【问题讨论】:

    标签: session asp.net-2.0


    【解决方案1】:

    我们通过检查 Application.Begin_Request 中是否存在用户特定页面的会话数据来处理它,如果不存在则将用户重定向到登录或主页。

    【讨论】:

      【解决方案2】:

      您可以使用 session_end 方法,因为它不是用户可调用的方法,它由 ASP.NET 触发并且响应不可用,因为它不是请求的一部分。

      最大的方法是检查并查看会话是否丢失,在页面加载的某个地方并重定向回主页面。

      我之前所做的是将此检查逻辑放在用于所有会话特定页面的“RestrictedPage.master”母版页中,如果会话丢失,它会重定向。

      【讨论】:

        【解决方案3】:

        我们在 global.asax.cs 文件中添加了以下代码:

         private void IsAuthenticated()
            {
                string vFileName = Path.GetFileName(HttpContext.Current.Request.Path);
                string vExt = Path.GetExtension(vFileName).ToLower();
                if ((vFileName != "Login.aspx") && (vExt == ".aspx"))
                {
                    if (HttpContext.Current.Session["LoggedIn"] == null)
                    {
                        HttpContext.Current.Response.Redirect("~/Login.aspx");
                    }
                }
            }
            void Application_PostAcquireRequestState(object sender, EventArgs e)
            {
                IsAuthenticated();
            } 
        

        NS:我们的 Global .asax 文件的第一行是:

        <%@ Application  Inherits="???.Global" Language="C#" %>
        

        【讨论】:

          猜你喜欢
          • 2011-03-19
          • 1970-01-01
          • 2021-12-04
          • 1970-01-01
          • 1970-01-01
          • 2012-09-18
          • 1970-01-01
          • 2010-09-10
          • 1970-01-01
          相关资源
          最近更新 更多