1

我在MVC4(.NET)網站中有單頁面應用程序。 某些方法對特定角色具有權限。經過一段時間後,登錄用戶收到錯誤「此請求的授權已被拒絕」

當用戶登錄到系統(帶餅乾)

FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 

一切工作正常,但如果用戶離開網站開通,一段時間後回來(至少30分鐘,我認爲)而無需刷新(這是一個單頁的應用程序,因此無需刷新),然後嘗試做一些網站 - 用戶得到一個錯誤

「授權已被拒絕了這個請求。」

刷新後(F5) - 一切恢復正常。

我想也許會議結束或類似的東西。我該如何解決它?

在我的web.config我有這行:

<authentication mode="Forms"> 
     <forms loginUrl="~/" timeout="2880" slidingExpiration="true" cookieless="UseCookies" /> 
    </authentication> 
+0

默認的超時時間爲30分鐘,它在你的情況屬實。您可以增加超時時間或尋找其他解決方案,而不是表單身份驗證。將Cookie保留在本地存儲和某處。在提出請求的同時(我相信你使用的是客戶端ajax),那麼你可以追加cookie – qamar 2015-01-21 05:15:23

+0

確實我使用客戶端ajax。我怎樣才能增加30分鐘?你有第二個建議的教程嗎? – TamarG 2015-01-21 05:18:49

+0

請參閱答案 – qamar 2015-01-21 05:20:21

回答

1

FormAuthentication超時48小時綽綽有餘。

問題是SessionState超時;默認情況下會在20分鐘後過期。

你有兩個選擇 -

  1. 增加SessionState的超時。 僅供參考:如果增加得太大,就會變成安全漏洞。

例如,在web.config中添加sessionState標籤(480 = 8小時)。

<sessionState timeout="480" /> 

OR

  • 創建在客戶端的計數器。如果頁面閒置19分鐘,則ping服務器。基本上,您需要在sessionState超時之前向服務器發送請求。
  • 例如,創建一個虛擬控制器,這樣並通過AJAX調用 -

    public partial class PingController : Controller 
    { 
        public ActionResult Index() 
        { 
         return Content("Ping!"); 
        } 
    } 
    
    +0

    我該怎麼做1和2?你是什​​麼意思ping服務器?只是創建和Ajax的 - 什麼?以及如何增加會話超時? – TamarG 2015-01-21 05:38:10

    +0

    謝謝!我會嘗試兩個。關於第二個答案 - 我所要做的就是向服務器發送一個請求,不管是什麼?只需連接服務器? – TamarG 2015-01-21 05:56:15

    +1

    是的,只需在會話過期之前通過Ajax向服務器發送虛擬請求即可。然後服務器將延長會話超時。 – Win 2015-01-21 14:52:21

    0

    可以增加網絡配置的超時值,在形式的認證部分,你在上面粘貼。

    <authentication mode="Forms"> 
        <forms loginUrl="~/" timeout="50000000" slidingExpiration="true" cookieless="UseCookies" /> 
    </authentication> 
    
    +0

    現在它是'超時=「2880」'這是48小時,但是它在48小時過去之前發生了很多,所以我沒有看到如何改變認證超時可以幫助。 – TamarG 2015-01-21 05:22:31

    相關問題