為什麼我的使用者可能在一分鐘左右後被註銷?
我有一個使用表單身份驗證的 Asp Mvc 2 站點。當我在本地執行它時,我可以登錄並無限期地保持登錄狀態。
但是,當我把它放在伺服器上時,我似乎只登錄了幾分鐘,然後似乎就被註銷了。我查看了 cookie,其中有 2 個似乎相關:
.ASPXAUTH 是一個會話 cookie .ASPXANONYMOUS,在 3 個月後到期。
當我刷新頁面時,cookie 保持不變,直到我註銷,當我似乎得到一個新的 .ASPXANONYMOUS cookie,但 .ASPXAUTH 似乎是一樣的。
似乎我可以保持登錄狀態,直到我在一段時間後做某事。如果我在登錄後立即送出表單,那麼它可以正常工作,但是如果我在大約一分鐘後一次又一次地送出數據,其中一個送出將作為註銷使用者而不是作為使用者已登錄,所有其他送出都是如此。
什麼可能導致這種行為,我怎樣才能找到不同的地方並改變它,以便我可以無限期地保持登錄狀態?
編輯,
它是一台伺服器,但經過更多調查和搜尋後,可能的候選者似乎是我在伺服器上使用了超過 100mb 並且應用程序池正在回收。我想現在我需要知道
- 如何檢查我正在使用多少記憶體。
- 有什麼建議可以減少這種情況。
可能是 ASP.NET 應用程序正在被重新循環或關閉(例如,由於空閒超時,或新建構/更改的程序集)?
預設情況下,當 ASP.NET Web 應用程序啟動時,它將為視圖狀態和會話 cookie 生成加密密鑰。這將使最初從應用程序的早期執行(或來自不同系統)提供的任何此類數據無效。
要讓會話在 ASP.NET 應用程序週期(和多伺服器場)中存活,您可以在
web.config:<system.web> ... <machineKey decryption="AES" validation="SHA1" decryptionKey="..." validationKey="..." />其中
decryptionKey和validationKey是長度取決於算法的十六進製字元串(使用 AES:64 位和 SHA1:128,對於其他算法,請檢查MSDN)。這些密鑰應該以加密方式生成,並且 .NET 具有執行此操作的類型,可以從 PowerShell 中使用:
$rng = New-Object "System.Security.Cryptography.RNGCryptoServiceProvider" $bytes = [Array]::CreateInstance([byte], 16) $rng.GetBytes($bytes) $bytes | ForEach-Object -begin { $s = "" } -process { $s = $s + ("{0:X2}" -f $_) } -end { $s}對於 AES,使用上述數組長度,對於 SHA1,使用 64 的長度。