2015-01-26 93 views
0

我使用.NET Framework 4.5自動重定向到登錄當會話過期

我已經設置了sessionState 60分鐘後到期。每個需要「記錄」的頁面都從名爲BasePage.cs的類繼承。在OnPreInit事件中,此類驗證會話對象並在會話過期時重定向到登錄頁面。

這裏是將sessionState(web.config中)的配置:

<sessionState timeout="60"/> 

這是我在班上 「BasePage.cs」 驗證:

protected override void OnPreInit(EventArgs e) 
{ 
    if (HttpContext.Current.Session["infosession"] == null) 
    { 
     Response.Redirect("default.aspx"); 
    } 

} 

這種驗證是偉大的工作時,用戶正在瀏覽頁面。

在一些頁面中,我使用的是從JavaScript調用的WCF服務(啓用了Ajax)。在生成頁面和調用WCF服務的時間之間,會話可能會過期。 鑑於我不應該認爲我的Wcf服務的消費者將是一種特定類型的軟件或具有某些功能,如網絡瀏覽器,我不能在那裏進行驗證

所以一些解釋,這裏的問題後:

是否有可能,當會話過期(後60分鐘),重定向自動到登錄頁面?

+0

您使用的是什麼類型的身份驗證?形式? – 2015-01-26 20:34:54

+0

是的,在客戶端使用'setTimeout'來註銷用戶。 – 2015-01-26 20:35:37

回答

1

假設您正在尋找客戶端解決方案 - 只需將計時器設置爲過期時間(即, 1小時)和How can I refresh a page with jQuery?

reloadTimer = setTimeout(60*60*1000, function() { location.reload();} 

你可能想,如果你得到復位會話超時頁面上的AJAX更新復位定時器。

請注意,它不會停止直接調用WCF服務,所以它不是安全措施,而是方便。

+0

有沒有辦法做到這一點的服務器端,就像會話過期時拋出一個事件刷新頁面一樣? – 2015-01-27 18:48:34

+0

@Vinc웃短版本 - 不,更長 - 您需要重新設計網站以支持連接回客戶端(即原始網絡套接字或SignalR),並找出「會話過期」意味着非內存狀態。對於評論甚至對於單個SO問題來說太大了。 – 2015-01-27 19:22:30

+0

好吧!我會讀到的!非常感謝你的建議:) – 2015-01-27 19:42:07

1

爲什麼不這樣做以下代替

public static string Infosession 
{ 
    get 
    { 
     object value = HttpContext.Current.Session["infosession"]; 
     return value == null ? "" : (string)value; 
    } 
    set 
    { 
     HttpContext.Current.Session["infosession"] = value; 
    } 
} 

我會在Global.asax.cs中的OnSessionStart()初始化值文件

HttpContext.Current.Session["infosession"] = string.Empty; 

我會提出這個代碼 protected override void OnPreInitPage_Load() event

另一種替代方案

protected void Page_load(EventArgs e) 
{ 
    if (HttpContext.Current.Session["infosession"] == string.Empty) 
    { 
     Response.Redirect("default.aspx"); 
    } 
} 
相關問題