2013-02-07 75 views
0

說我在主頁加載事件。如果用戶登錄,我需要將它們從Login.aspx重定向,如果沒有登錄,我需要將它們重定向到Login.aspx。但首先,我需要知道他們試圖訪問哪個頁面。從主頁面加載中查找請求的頁面?

我怎樣才能得到這些信息?

感謝

+1

爲什麼不使用['FormsAuthentication'](http://msdn.microsoft.com/zh-cn/library/ff647070.aspx)的ASP.NET成員資格提供程序並設置[ LoginUrl'(http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.loginurl.aspx)? –

+0

是的,它更好地使用ASP.NET會員供應商 –

回答

1

所以你可以做的是爲所有頁面創建一個基類,然後在該類中重寫OnInit(EventArgs e)方法。在這種方法中,放入檢查用戶是否在系統上簽名的代碼(通過檢查表示用戶的會話變量是否爲空),如果該變量爲空,則執行重定向到登錄頁面。如果你遵循這種方法,你的所有內容頁面(登錄頁面除外)都必須從這個基類繼承。

我希望這可以幫助你。

public class BasePage : Page 
{ 
    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="e"></param> 
    protected override void OnInit(EventArgs e) 
    { 
     if (Session["Usuario"] == null) 
     { 
      Response.Redirect(ResolveClientUrl("~/Login.aspx")); 
     }   
    } 
} 
0

你可以使用Request.RawUrl來獲取當前URL被請求。

if (Request.RawUrl.StartsWith("/login.aspx")){ 
    //Check whether user is logged in 
} 
+0

如果我只想Test.aspx out of www.blah.com/jjj/Test.aspx – jmasterx

+0

你可以使用'Path.GetFileName(Request.Url)'' – Curt

0

這有點令人困惑。您希望相同的母版頁從內容頁面(例如default.aspx)重定向到登錄頁面(例如Login.aspx)&從登錄頁面到內容頁面。你只需要做這些事情之一。

首先,您將需要2個母版頁(或者只是從Login.aspx中刪除母版頁),因爲您會被遞歸循環捕獲。

說用戶試圖訪問您的網站,他們沒有登錄。他們將​​被重定向到Login.aspx,它將檢查並看到他們沒有登錄,將他們重定向到Login.aspx,依此類推......

如果他們已經登錄,那麼不應該從Login.aspx重定向,因爲他們不應該首先來到這個頁面,除非他們不是。

最後,在主頁面執行快速檢查以查看用戶是否已登錄,如果不是,則重定向到登錄頁面,並在他們請求的頁面中傳入作爲url的參數(如前所述,創建一個Session變量也可以)。

If (!userLoggedIn) 
{ 
    Response.Redirect("Login.aspx?Url=" + Request.Url); 
} 

這通過在他們當初去作爲參數的網址(例如,爲Login.aspx?URL = Default.aspx的)

那麼的Login.aspx

If (userSuccessfullyLoggedIn) 
{ 
    Response.Redirect(Request.Params["Url"]); 
} 

這將將它們重定向到它們最初請求的頁面(例如default.aspx)