【问题标题】:redirecting to the previously browsed web page after session expires会话过期后重定向到之前浏览的网页
【发布时间】:2012-02-22 06:54:35
【问题描述】:

我正在使用 asp.net 开发网站。登录后在我的网站中,我为登录用户设置会话以满足我的网站需要。并在每个页面上检查该会话是否为 null 或具有值,具体取决于我重定向到登录页面的值。

我的问题是登录后我想重定向到以前浏览过的网页,我使用以下方式完成了它-

特定页面上用于检查会话值的代码-

if (Session["EmployeeID"] != null)
    {

    }
    else
    {
        Response.Redirect(ResolveUrl("~/login.aspx?IsTimeout=1"), true);
    }

登录页面上的代码-

If Request.QueryString("IsTimeout") IsNot Nothing Then
   If Request.QueryString("IsTimeout") = "1" Then
      Login1.DestinationPageUrl = Request.UrlReferrer.ToString()
   End If
End If

还有其他方法可以正确地做到这一点吗?

【问题讨论】:

    标签: c# asp.net vb.net session


    【解决方案1】:

    我不确定正确的方法......但我正在做这样的事情......

    我有一个请求登录页面并传递referrer参数的函数

        protected void RequestLogin()
        {
            string OriginalUrl =  HttpContext.Current.Request.RawUrl;
            string LoginPageUrl = "~/LogIn.aspx";
            HttpContext.Current.Response.Redirect(String.Format("{0}?ReturnUrl={1}", 
            LoginPageUrl, OriginalUrl));
        }
    

    这是登录后的重定向。

       if (this.Request.QueryString["ReturnUrl"] !=null) 
       {
            this.Response.Redirect(Request.QueryString["ReturnUrl"].ToString());
       }
       else
       {
            this.Response.Redirect("Default.aspx");
       }
    

    【讨论】:

    • 当有多个查询字符串变量时,这将不会处理,在这种情况下使用会话来存储returnurl。会话["ReturnUrl"] = HttpContext.Current.Request.RawUrl;
    • 它甚至可以使用查询字符串变量。会话有时很棘手,因为它不是线程安全的。
    【解决方案2】:

    您可以通过使用 Request.UrlReferrer.ToString() 来完成此操作。这将为您提供用户所在的最后一页的名称。那么你可以做一个 response.redirect(Request.UrlReferrer.ToString()) 或类似的东西。对不起,伪代码。

    【讨论】:

      【解决方案3】:

      当页面从另一个页面重定向时保存上一页 url 以查看状态,当回发生成然后重定向到最后一页时..

      试试这个:

      protected void Page_Load(object sender, EventArgs e) 
      { 
           if( !IsPostBack ) 
           { 
               ViewState["RefUrl"] = Request.UrlReferrer.ToString(); 
           }
           if (Session["EmployeeID"] != null)  
           {  
      
           }  
           else  
           {  
               object refUrl = ViewState["RefUrl"]; 
               if (refUrl != null) 
                   Response.Redirect((string)refUrl);
           }  
      }
      

      参考: How to go back to the previous page in ASP.NET 2.0
      Asp.net 论坛 - redirect to previous page RSS

      【讨论】:

        【解决方案4】:

        还有其他方法可以正确地做到这一点吗?

        好吧,我认为有。当 ASP.NET 提供 .NET Forms 身份验证时,不要重写身份验证、超时和重定向。如果会话超时,它将自动添加您可以在身份验证代码中处理的“ReturnUrl”。查看this link 获取源代码以及关于实现表单身份验证以及利用其其他一些功能的讨论...

        【讨论】:

          【解决方案5】:

          以我的拙见,我认为该问题的最佳解决方案是在您的项目中的集中页面中工作..据此,我们不会找到比我们项目的母版页更合适的页面来完成这项工作。我将编写一些代码来展示我们如何实现该问题:

          // In Login Page ..
          // I used a submit button to figure out the event of my code ..
          protected void ButtonInsert_Click(object sender, EventArgs e)
          {
              Session.Add("EmployeeID", 100); // This 100 is just a fixed value ..
          
              if (!String.IsNullOrEmpty(Request.QueryString["Red_Page"]))
              {
                  Response.Redirect(Request.QueryString["Red_Page"]);
              }
              else
              {
                  Response.Redirect("EmployeeDepartment.aspx");
              }
          }
          
          // In Master Page ..
          protected void Page_Load(object sender, EventArgs e)
          {
              if (!Page.IsPostBack)
              {
                  // In Master Page 
                  if (Session["EmployeeID"] != null)
                  {
                      // Write ur business Code 
                  }
                  else
                  {
                      // I stored the Page URL in uery String.
                      // Stroing the URL in a cookie will be also a good alternative solution ..
                      string CurrentURLBeofreTimeout = Request.RawUrl;
                      string LoginURL = "login.aspx";
                      string newURL = string.Format("{0}?Red_Page={1}", LoginURL, CurrentURLBeofreTimeout);
                      Response.Redirect(newURL);
          
          
                  }
              }
          
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-06-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-12-09
            • 1970-01-01
            相关资源
            最近更新 更多