我們有一個需要登錄的內部ASP.NET MVC應用程序。登錄工作很好,並做到了預期的。我們有15分鐘的會話過期。在那段時間坐在單頁上之後,用戶已經失去了會話。如果他們嘗試刷新當前頁面或瀏覽到另一頁面,他們將獲得登錄頁面。我們保留他們的請求,所以一旦他們登錄後,他們就可以繼續訪問他們請求的頁面。這很好。ASP.NET MVC會話到期
但是,我的問題是,在一些頁面上有AJAX調用。例如,他們可能填寫表格的一部分,流浪並讓他們的會話過期。當他們回來時,屏幕仍然顯示。如果他們只是填寫一個框(這將使AJAX調用),AJAX調用將返回登錄頁面(在AJAX應該返回實際結果的任何div內)。這看起來很可怕。
我認爲解決方案是讓頁面本身過期(這樣當會話終止時,它們會自動返回到登錄屏幕而不需要任何操作)。但是,我想知道是否有意見/想法如何最好地實現這與ASP.NET MVC的最佳實踐有關。
更新:
所以我繼續在我的OnActionExecuting
(每Keltex的建議)
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.Write("Invalid session -- please login!");
filterContext.HttpContext.Response.End();
}
else
{
...
}
}
這無疑使事情變得更好的實現這一點 - 現在即使他們有兩個選項卡(一個帶有一些可以觸發的AJAX調用),並且他們會在第二個選項卡中明確註銷,他們會立即得到更有意義的東西,而不是一堆搞砸的AJAX數據。
我仍然認爲我會執行JavaScript的倒計時以及womp建議。
@Andrew - 這是一個優雅的解決方案。無論如何,filterContext.HttpContext.Response.Redirect(「/ error/xxx」); (或其他)工作? – Keltex 2010-04-07 22:05:39
@Keltex:我可以按照你的建議將它移動到一個視圖中 - 但在我的許多AJAX調用中,它們返回的是沒有HTML的原始數據(如值列表),而在其他情況下,它們可能會返回整個表格式良好的數據。因此,對於原始數據的「最低公分母」可能效果最好。我會玩。 – 2010-04-07 23:00:17