2011-05-27 50 views
0

我在Session.Abandon之後面臨一個特殊的重定向問題,這裏是代碼片段刪除會話或session.abandon後,重定向請求未完成

if (Session["Login"] != null) 
      { 
       login = (LoginState)Session["Login"]; 
       if (!RoleValidation.ManagerRoleValidate(login.role_id)) 
       { 
        Session.Remove("Login"); 
        Session.RemoveAll(); 
        Session.Abandon();      
        Response.Redirect("~/Login.aspx"); 

       } 
      } 

這裏如果條件爲真需要很長時間才能重定向...實際上它根本沒有重定向到頁面它似乎被卡在了某個地方...已將此部分放入try catch塊,它表示爲

Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack 

我不確定是什麼導致它。它發生的原因是什麼?

完整的代碼片段是:

  protected void Page_Load(object sender, EventArgs e) 
    { 

     if (Session["Login"] != null) 
     { 
      login = (LoginState)Session["Login"]; 
      if (!RoleValidation.ManagerRoleValidate(login.role_id)) 
      { 
       Session.Remove("Login"); 
       Session.RemoveAll(); 
       Session.Abandon(); 
       Response.Redirect("~/Login.aspx", false); 

      } 
     } 
     else 
     { 
      Response.Redirect("~/Login.aspx"); 
     } 


    } 
public static Boolean ManagerRoleValidate(String Role_id) 
{ 
    if (Role_id.Equals("1") || Role_id.Equals("2") || Role_id.Equals("4") || Role_id.Equals("999")) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 

    } 
} 

並且Login.aspx中沒有重定向,因此它可以反覆重定向。

+0

此代碼是否在母版頁中? Login.aspx是一個主內容頁面嗎? – Sreekumar 2011-05-27 05:01:51

+0

@Sreekumar沒有它在母版頁它的兒童頁面 – Joy 2011-05-27 05:12:07

回答

0

在此過程中還有另一個請求,同時您還需要其他請求。如果您添加false,請登錄it will terminate the current request並轉至登錄頁面。

Response.Redirect("~/Login.aspx", false); 

這個問題是最常見的,如果你Try Catch Block下添加Response.Redirect聲明引起的。

try 
    { 
     Response.Redirect(""~/Login.aspx"); // here you want to redirect, but try catch is still have to complete, It will go in the Exception block 
    } 
    catch (Exception ex) 
    { 
     throw; 
    } 
+0

@Akhtar我已經嘗試過,因爲它導致相同。 :(它不工作:( – Joy 2011-05-27 04:51:05

+0

你可以刪除try catch塊並嘗試 – 2011-05-27 04:52:10

+0

@Akhtar我刪除了try catch塊:(它仍然是一樣的:( – Joy 2011-05-27 04:55:08

0

可能的原因可能是從的Login.aspx也代碼的這部分被執行,所以這種反應會一次又一次地重定向到Login.aspx。

+0

在登錄頁面中根本沒有重定向。所以它不可能一次又一次地重定向到所請求的URL。 – Joy 2011-05-27 05:11:10

0

不知道爲什麼這會造成麻煩。我已經取代了

session.abandon

session.clear

方法,該方法清除所有會話。雖然在Global.asax中我已經從上面的代碼刪除行

Response.Redirect("~/Login.aspx"); 

後寫

void Session_End(object sender, EventArgs e) 
{ 
    if (Request.Cookies["ASP.NET_SessionId"] != null) 
    { 
     Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddYears(-30); 
    } 

    Response.Redirect("~/Login.aspx"); 
} 

它應該引發事件Session_End中內的Global.asax,但由於某種原因,它經歷了千百年來compelte請求。這就是我如何解決我的問題。如果有人能解釋這裏發生了什麼,以及上述事情如何解決它。請回復,以便其他人可以從中受益