2009-08-29 119 views
2

如果您在訪問受保護頁面時將表單身份驗證設置爲重定向到login.aspx,那麼在login.aspx中檢測用戶是否因爲沒有登錄還是因爲他們的表單驗證票已過期?我想顯示「你已超時」的信息。檢測登錄頁面中的表單身份驗證超時

(我不提這個問題的話會話,因爲ASP.NET對待他們這麼明顯,但是,如果有涉及會話一個好的解決方案,我所有的耳朵)

我已經通過在用戶登錄時設置另一個cooke「hasloggedin」來解決此問題,然後檢查是否存在以確定是否超時並顯示適當的消息。但是,這必須是一個常見問題?

+0

您的cookie的方法似乎是做一個好辦法。如果您已經在使用會話變量(取決於它們對認證超時的相對超時值),則可以檢查「Page.Session.IsNewSession」以查看會話是否使用當前請求創建。 – JustinStolle 2010-10-02 19:51:46

回答

2

表單身份驗證會自動附加一個URL參數'ReturnURL',指示哪個頁面(如果有的話)觸發了重定向到登錄頁面。大多數網站都有一個'Default.aspx'或'index.html'等默認頁面。您可以檢查ReturnURL以查看它是否包含默認頁面或應用程序中的其他頁面。

例:

string refererURL; 
if (page.Request.QueryString["ReturnURL"] != null) 
{ 
    refererURL = page.Request.QueryString["ReturnURL"].ToString(); 
} 

//Check to see if user was redirected because of Timeout or initial login 
//Where "Default.aspx" is the default page for your application 
if (refererURL != "" && refererURL != (ResolveUrl("~") + "Default.aspx")) 
{ 
    //Show HTML etc showing session timeout message 
} 
else // User redirected here to to initial login 
{ 
    //Show HTML showing initial login HTML message etc 
} 
+0

好主意。這對我目前的應用程序來說可能很好,但對於我所做的其他操作,匿名頁面上的鏈接已經鏈接到需要驗證的頁面,因此returnurl不足以區分超時或第一次嘗試保護年齡。但是,我認爲這應該在很多情況下起作用,並且將它與查看returnurl的實際價值結合起來應該會更好。謝謝回覆。 – RyanW 2009-08-30 21:12:33