Asp.net會話過期重定向到登錄頁面




session .net-2.0 (4)

會話過期時重定向到登錄頁面的最佳方式是什麼? 我在用著

sessionState mode="InProc"

我可以在web.config文件中設置它嗎?


關於會話過期的技巧是,這發生在後台運行的工作進程中,沒有直接的方式來通知用戶,而不必返回服務器來檢查事情的狀態。

我所做的是我有頁面註冊一個Javascript塊,將在指定的超時後重新將用戶重定向到登錄頁面:

Page.ClientScript.RegisterStartupScript(Me.GetType, "TimeoutScript", 
"setTimeout(""top.location.href = '~/Login.aspx'""," &
 ConfigurationManager.AppSettings("SessionTimeoutMilliseconds") & ");", True)

你會注意到我有我的web.config文件中存儲的實際毫秒數,以便我可以根據需要調整超時長度。

使用這個,結合Global.asax文件中典型的Session_End事件,在我的web應用程序中處理會話超時的方式非常乾淨。


你能綁在Global.asax文件中的Session_End事件嗎?


一個選項,而不是設置一個客戶端定時器盲目重定向,是讓計時器命中一個小的web服務,可以指示是否應該重定向用戶。 這樣做會給你更多的靈活性,你可以在很多情況下重定向用戶,包括:

  • 會話已過期
  • 同一用戶帳戶從另一台機器登錄
  • 網站正在進入主要模式,你想踢出用戶。

我用這個方法取得了很大的成功,用於處理多個用戶帳戶。 至於處理會話,你甚至會希望監聽會話超時,然後存儲在會話超時的散列表中。

當該用戶調用Web服務時,您將它們從哈希中移除,並告訴客戶端代碼重定向它們。

這種類型的系統的另一個好處是你可以追踪瀏覽器到達服務器的時間,所以你可以更好地了解誰在線。

編輯

回應評論貝婁:

我不認為調用公共方法會更清潔。 只要你這樣做,你假設所有的頁面共享一個母版頁或公共基類。 我不想做這個假設。 此外,如果您打算使用PageMethods方法,這將不起作用,因為PageMethods必須是靜態的。

我不完全確定你的意圖是什麼,但是如果你打算在每個請求中調用這個方法,那麼我會使用一個http模塊來做到這一點,並掛鉤到管道; 但是,這只有在提出請求時才有效。 通過使用帶有客戶端計時器的Web服務,即使用戶沒有提出任何請求,也可以重定向用戶。


貝婁答案是有史以來最好的例子......

更好地嘗試這種方式:

Page.ClientScript.RegisterStartupScript(Me.GetType, "TimeoutScript", "setTimeout(""top.location.href = '~/Login.aspx'""," & ConfigurationManager.AppSettings("SessionTimeoutMilliseconds") & ");", True)

你會注意到我有我的web.config文件中存儲的實際毫秒數,以便我可以根據需要調整超時長度。

使用這個,結合Global.asax文件中典型的Session_End事件,在我的web應用程序中處理會話超時的方式非常乾淨。

問候,Nagaraju R || 戴爾PerotSystems ||