說我在主頁加載事件。如果用戶登錄,我需要將它們從Login.aspx重定向,如果沒有登錄,我需要將它們重定向到Login.aspx。但首先,我需要知道他們試圖訪問哪個頁面。從主頁面加載中查找請求的頁面?
我怎樣才能得到這些信息?
感謝
說我在主頁加載事件。如果用戶登錄,我需要將它們從Login.aspx重定向,如果沒有登錄,我需要將它們重定向到Login.aspx。但首先,我需要知道他們試圖訪問哪個頁面。從主頁面加載中查找請求的頁面?
我怎樣才能得到這些信息?
感謝
所以你可以做的是爲所有頁面創建一個基類,然後在該類中重寫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"));
}
}
}
這有點令人困惑。您希望相同的母版頁從內容頁面(例如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)
爲什麼不使用['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)? –
是的,它更好地使用ASP.NET會員供應商 –