2011-01-12 43 views
1

我在asp.net形式認證新啓動時檢查會議和會議如何在母版或在Global.asax中

我想知道如何保存在母版或在Global.asax中 以及如何會議清除會話

如何更好地通過重定向到一個頁面

處理會話超時,這是我的web.config會話設置

<sessionState mode="InProc" cookieless="false" timeout="1"></sessionState> 

代碼在我的母版

if (Request.Url.AbsolutePath.EndsWith("SessionExpired.aspx", StringComparison.InvariantCultureIgnoreCase)) 
    { 
     HtmlMeta meta = new HtmlMeta(); 
     meta.HttpEquiv = "Refresh"; 
     meta.Content = "7; URL=./Login.aspx"; 
     Page.Header.Controls.Add(meta); 
    } 
    else 
     HttpContext.Current.Response.AppendHeader("Refresh", Convert.ToString((Session.Timeout * 60)) + "; Url=./Public/SessionExpired.aspx"); 

回答

1

這樣,你的戰略看起來不錯給我,但我希望有一個不同的實現:

  1. 使用從System.Web.UI.Page派生爲抽象類所有頁面的基類。比方說,我們稱這個類爲BasePage。
  2. 添加虛擬方法,如IsRefreshHeaderNeeded - 默認實現將返回true。該方法將在BasePage的PreRender階段中調用,以在響應中添加實際的刷新標題。
  3. 在SessionExpired頁面中,IsRefreshHeaderNeeded將被覆蓋以返回false。 (類似的可能需要登錄頁面或不需要會話支持的頁面)。
  4. 刷新頁眉/元重定向到登錄頁面將被添加到SessionExpired頁面本身(實際上它是一個頁面內的邏輯,爲什麼要把它放在全局的地方)。 SessionExpired頁面當然會有鏈接用於手動導航到登錄頁面(以防重定向不起作用)。

母版頁是一個內容模板,我更喜歡只有邏輯相關的母版頁內的內容。

另一種策略是不使用客戶端刷新進行會話過期,而是在用戶訪問站點時指示當前會話已過期時從服務器端進行刷新。進一步擴展,甚至可能有將關鍵會話數據保存到數據庫中的實現,以便重新構建會話,並且從用戶體驗角度來看,不會有會話過期。 地方執行該代碼(如VinayC建議,母版或從System.Web.UI程序派生的類:

1

你可以通過調用

Session.Abandon(); 
    System.Web.Security.FormsAuthentication.RedirectToLoginPage(); 

關於會話過期手工清除的會話。頁充當您所有的內容頁面的基類(意思是在你的代碼隱藏在aspx頁面文件到您的自定義類的派生自System.Web.UI.Page改變推導)

if (Request.Url.AbsolutePath.EndsWith("SessionExpired.aspx", StringComparison.InvariantCultureIgnoreCase)) 
    { 
     // your html redirect code here 
    } 
    else 
     Response.Redirect("~/Public/SessionExpired.aspx");