2013-04-15 49 views

回答

1

默認情況下,FormsAuthentication通過讓客戶端存儲數據的加密副本來驗證每個請求上的驗證數據。加密密鑰存儲在Machine.config中。具體使用的關鍵是<machineKey decryptionKey="YOUR KEY HERE">

如果您沒有提供解密密鑰,則會在應用程序啓動時自動生成一個。由於它是隨機生成的,每次重新啓動應用程序時都會有所不同。在驗證階段,FormsAuthentication嘗試解密認證數據並失敗。然後用戶不再登錄。

解決此問題的方法有兩種。

  • Machine.config提供的machineKey會給FormsAuthentication一致的鍵使用,因此驗證將與以前的應用程序運行的加密cookie的成功。
  • 在Web.config中使用<forms protection="None" ... />將禁用認證數據加密和驗證。這是不安全的,只適合於開發,因爲用戶模仿對方將會是微不足道的。
+0

謝謝你的啓發。 MSDN同意:http://msdn.microsoft.com/en-us/library/ff649308.aspx特別看看**配置來加密表單身份驗證票證** – basarat

1

asp.net中的默認會話狀態模式是in-proc(緩存在內存中),除非您另有指定。當應用程序關閉時,內存被清除,進程內會話緩存因此丟失。

@dhasenan如果應用程序跨Web場或雲部署,machinekey配置將只是一個問題。重寫Machinekey元素的機器級配置的想法是確保多臺機器使用完全相同的密鑰。

因此,計算機密鑰不應該,因爲如果在應用級沒有提供一個,在machine.config計算機密鑰將被用來代替一個問題,這是堅持和靜態的,所以它不會會話之間重新生成。

相關問題