Asp.net

為什麼我的使用者可能在一分鐘左右後被註銷?

  • December 12, 2018

我有一個使用表單身份驗證的 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="..."
 />

其中decryptionKeyvalidationKey是長度取決於算法的十六進製字元串(使用 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 的長度。

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