2017-06-07 155 views
0

我的ASP.Net MVC應用程序有問題。 我在我的web.config以下:在ASP.NET MVC會話超時

<authentication mode="Forms"> 
    <forms loginUrl="~/Login" timeout="525600" /> 
    </authentication> 
    <sessionState mode="InProc" timeout="525600" /> 
<machineKey validationKey="" decryptionKey="" validation="SHA1" decryption="AES" /> 

這在我的Global.asax

public void Session_OnStart() 
    { 
     Session.Timeout = 525600; 
    } 

還有些時候,它工作正常,但有時會僅有3後耗盡 - 5分鐘。我錯過了什麼。有什麼我可以做,使會議持續更長時間。 感謝

更新

的你有些懷疑的問題是回收的時間,但我的生產服務器上,我沒有必要的權利,改變循環的時間來測試。 最後,我通過手動將會話數據保存在數據庫中,然後在Web會話過期時從數據庫中獲取所需的數據並將其放回到Web會話中來修復它。

非常感謝您的幫助。

+0

你是怎麼測試這個的?你怎麼知道它失敗了? –

+0

當會話超時時,應用程序處於活動狀態並且用戶可以註銷。 – Naruto

+0

如上所示會話狀態模式是InProc,我沒有設置EnableSessionState – Naruto

回答

0

因爲你設置模式爲「進程內」和你提到它爲有時有有時沒有工作,所以您的應用程序可能導致回收你的會話重新啓動

所以首先確保沒有其他代碼變化會話超時

確保應用程序未被回收。

+0

如何確保應用程序不被回收? – Naruto

+0

日誌應用程序啓動事件 –

0

還有一些其他的方法可以在session「過期」,例如:在多標籤

  • 用戶 - 註銷一個選項卡上,返回到其它後,預計它的工作。
  • 服務器端代碼的更改可能導致會話在服務器上被清除。
  • 服務器上的代碼運行在一個Web農場(多臺機器)上 - 這對於'InProc'會話狀態可能會有問題。

InProc方式對Web場

如果你是一個網絡農場和你的機器按鍵都沒有建立在web.configs匹配,那麼你的退出可能是由於請求轉到另一個服務器(auth cookie不會解密並因此未經身份驗證)。

InProc在webfarm情況下無法正常工作。您需要選擇另一個方法(SQL Server會話狀態是另一個內置選項),這會將會話存儲到另一個位置。還有其他第三方選項用於在中央計算機上存儲會話狀態。

+0

您認爲InProc可能會對網絡農場有任何想法如何解決它? – Naruto

+0

@Naruto - 請參閱編輯。 – Paddy

+0

我在我的web配置中設置了機器密鑰還有其他問題嗎? – Naruto