2011-10-25 42 views
1

我有一個ASP.NET MVC 3應用程序。該網站涉及人們使用網頁表單中的textarea編寫冗長的回覆。偶爾,用戶抱怨他們發佈數據後將其重定向到登錄表單。我不確定他們爲什麼要註銷,因爲用戶通常不會提供足夠的錯誤信息。我認爲這是由於會話超時或應用程序由於某種原因而重新啓動所致。這是在一個共享的網站託管網站,它沒有自己的應用程序池。在ASP.NET MVC 3應用程序中,如何將發佈數據保存在會話超時的地方

在任何情況下,不管是什麼原因,我想捕獲後的數據,並將其保存到數據庫或文本文件。如何在控制器將用戶重定向到登錄屏幕時獲取發佈數據並保存。

我知道長期計劃將是確定超時發生的原因。但現在我希望能夠獲取後期數據並在稍後恢復。

+1

我會建議增加會話超時,如果不是,你可以在global.asax的session_End上做些什麼 –

回答

0

一個解決方案可以把一個使用JavasScript定時器,不斷擊中服務器指定時間間隔後保持會話活着直到你找出的會話超時(只有我的會話超時問題)

1

第一原因爲了避免超時,我建議使用客戶端心跳解決方案(如http://plugins.jquery.com/project/Heartbeat

其次,假設您使用表單身份驗證,爲了保存發佈的數據,當Forms Authorization Module重定向您的用戶時,您需要攔截Global.asax中的EndRequest HttpApplication事件處理程序或您自己的模塊中的重定向。

攔截這些請求的方式不是那麼簡單,因爲在「EndRequest」管道步驟中,您將看到302 HTTP狀態代碼(重定向指令),而不是401(未經授權的錯誤)。因此,您可以檢查請求是否未通過身份驗證(HttpContext.User.Identity.IsAuthenticated),並且請求被重定向 - 在這種情況下,您可以保存您在請求中看到的內容。

否則,你將需要關閉窗體身份驗證,並使用一些解決方案,這是更接近ASP.NET MVC。

0

如果您想停止會話超時,可以在頁面上添加隱藏的iframe。例如,創建一個名爲KeepSessionAlive的新頁面並執行此操作:

<meta http-equiv="refresh" content="600"> 

其中content = seconds。 我不知道MVC 3,但是您可以獲取和存儲帖子值的方式是在將用戶重定向到登錄頁面之前捕獲它們。

相關問題