Asp.net-Mvc

ASP.NET MVC 會話過期

  • May 6, 2016

我們有一個需要登錄的內部 ASP.NET MVC 應用程序。登錄效果很好,並且符合預期。我們的會話到期時間為 15 分鐘。在那段時間坐在一個頁面上之後,使用者已經失去了會話。如果他們嘗試刷新目前頁面或瀏覽到另一個頁面,他們將獲得一個登錄頁面。我們會保存他們的請求,以便他們登錄後可以繼續訪問他們請求的頁面。這很好用。

但是,我的問題是在某些頁面上有 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 數據。

我仍然認為我將實施 womp 建議的 Javascript 倒計時。

具體來說,我不知道有什麼最佳實踐,但我現在正在為我們的應用程序這樣做。我們選擇了客戶端解決方案,我們將會話超時值輸出到母版頁中的一些 javascript,併計算會話何時到期。

提前 5 分鐘,我們會彈出一個模態對話框,上面寫著“你還在嗎?” 帶有倒數計時器。一旦計時器達到 0:00,我們將瀏覽器重定向到登錄頁面。

它使用最少的 javascript 來執行時間和計時器計算,以及一個簡單的 .ashx 處理程序,如果使用者點擊“我回來了!”,它將刷新會話。在會話到期之前的對話框中。這樣,如果他們及時返回,他們可以在沒有任何導航的情況下刷新會話。

引用自:https://stackoverflow.com/questions/2595803