2012-04-16 67 views
2

我正在使用使用標準表單身份驗證的MVC 3開發Web應用程序。它託管在共享主機上。問題是有時用戶身份驗證狀態會丟失。我根本沒有例外。你有什麼線索是什麼原因?ASP MVC 3:身份驗證在生產中有時會丟失

身份驗證與會話有什麼關係?我根本沒有使用Session對象。 我的印象是使用cookie的身份驗證可以在負載平衡的環境中工作。我錯了嗎?

會話在20分鐘時間之前丟失。

+0

這並不值得繼續。也許應用程序池出於某種原因正在回收? – mgnoonan 2012-04-16 15:25:51

回答

3

幾件事情浮現在腦海中的位置:

  1. 是否有任何模式給丟了認證?意思是,它總是在20分鐘後還是真的看起來是隨機的?

  2. 既然你是共享主機,你明確地設置你的機器密鑰在你的web.config?如果你不這樣做,並且它們被設置爲自動生成,那麼如果你的應用程序是負載均衡的話,這些密鑰將會不同。因此,你在服務器A上進行身份驗證和一些後續請求進入到服務器B,你的應用程序將無法在授權cookie和「踢你出去」

在Web場解碼,你不能保證它服務器將處理 連續請求。如果用戶在一臺服務器上進行了身份驗證,並且下一個請求轉到另一臺服務器,則身份驗證憑證 未通過驗證,並要求用戶重新進行身份驗證。 machineKey元素 中的validationKey和decryptionKey屬性用於對票證進行表單驗證 票據的散列和加密。這些屬性的默認值是 AutoGenerate.IsolateApps。這些密鑰是爲每個 應用程序自動生成的,並且它們在每臺服務器上都不相同。因此, 在一臺計算機上加密的身份驗證憑單不能在Web場中的另一臺計算機上或在同一臺Web服務器上的另一個應用程序中進行解密和驗證,即 。要解決此問題,網絡場中的所有 計算機上的 validationKey和decryptionKey值必須相同。

請參閱here for more information在第二位。

+0

非常感謝。我現在設置了機器鍵,它工作正常。你救了我的一天:) – 2012-04-16 19:16:25

+0

真棒 - 很高興聽到它! – Tommy 2012-04-16 19:18:49

+0

@Tommy:「在Web場中,你不能保證哪個服務器會處理連續的請求。」 - 不會粘滯的會議在這​​裏是一個選項 ? – 2012-04-16 20:23:07

0

會話超時,如果你經過它,你的會話(和認證)將被破壞。

你可以從web.config增加它的超時時間,而且這是我走的路,你可以製作一個虛擬的頁面,每隔幾分鐘你就可以用AJAX查看。後者的優點是,當用戶關閉瀏覽器時,您的會話仍然會以足夠及時的方式終止,而不是使用資源停留半小時,並阻止Application_OnExit運行。

+0

身份驗證與會話有關嗎?我根本沒有使用Session對象。 – 2012-04-16 18:17:57

+0

您的身份驗證ID保存在會話對象中,是的。 – Blindy 2012-04-16 18:19:51

+0

不合作 - 會話和表單認證是互斥的。您的身份驗證信息通常存儲在加密的cookie中,該cookie會隨每個請求傳入/傳出您的應用程序。請參閱這裏獲取更多信息:http://msdn.microsoft.com/en-us/library/ff647070.aspx – Tommy 2012-04-16 18:24:56