2009-11-09 93 views
0

我有網站,用戶很多ajax(jquery)。現在,如果用戶因任何原因超時(走了大約30分鐘或某事)。在接下來的操作中,我希望它們返回到登錄頁面。如何在超時後將用戶重定向到登出頁面? Asp.net MVC

我在webconfig(returnUrl和timeout)中設置了一切,如果他們嘗試去一個頁面,他們沒有權限去他們得到發送到登錄頁面。

但是,我的控制器中用於Ajax請求的方法上有授權標記。因此,如果用戶超時,他們不再通過身份驗證,但他們可能會在登錄後離開所需的身份驗證。

現在,他們可以去嘗試在這一點上保存一些東西,這會做一個Ajax請求。授權標記將阻止他們這樣做,因爲他們將失敗授權並返回url將踢入。

但是,儘管返回網址似乎被髮回給他們,但他們沒有被重定向到登錄頁面。所以我猜,因爲所有這些東西都是Ajax這就是爲什麼它不能正常工作。那麼,我能解決這個問題嗎?

回答

1

您需要檢查403響應的Ajax錯誤

+0

我沒有收到「403」錯誤。我回到200 OK。 – chobo2 2009-11-09 19:26:43

+0

實際上,好像我得到了200 OK,但是如果我設置了一個Jquery Ajax.Error,它會轉到錯誤方法。但不知道如何檢查它是否是403錯誤。 – chobo2 2009-11-09 20:32:22

+0

此外,如果這將工作,這隻會解決一半的問題。由於我有ajax選項卡,如果身份驗證失敗,會發生什麼情況。它將登錄頁面加載到選項卡中。 – chobo2 2009-11-09 20:33:47

1

使用setTimeout每30秒運行一次客戶端函數,如果會話超時,應通過AJAX詢問服務器。如果有,客戶端代碼可以拋出任何登錄cookie並重定向到登錄頁面。

您可以將登錄url硬編碼到客戶端代碼中,也可以讓服務器處理程序從web.config中返回值,如果它需要超時。

這仍然會導致用戶可能會在用戶實際超時和客戶端代碼請求檢查之間的0-30秒內嘗試一些內容。爲了防止出現這種情況,請讓服務器返回會話中剩餘的時間量,這樣您的客戶端代碼可以決定是要早一點再檢查一次,還是在服務器端執行客戶端重定向宕機時間。

+0

您能否給我寫一個簡短的相同代碼。我不知道如何讓它在30秒內運行,也不知道setTimeout是什麼。這是一個jQuery的功能? javscript函數? – chobo2 2009-11-09 02:37:37

+1

Hi Chobo,Rasik again ....以下是我的朋友和同事寫的自動登出示例代碼的鏈接...看看它吧...... http://www.firozansari.com/ 2009/05/15/Implement-auto-logout-functionality/ – 2009-11-09 02:41:58

+0

如果使用它的人不止一個,這可能會導致服務器癱瘓。 – 2009-11-09 13:59:10

相關問題