2010-05-17 131 views
1

我最近部署了一個使用asp.net成員資格(SqlMembershipProvider)的應用程序,我不知道爲什麼,但它在1分鐘不活動後自動註銷。這在我的開發環境中不會發生。我甚至將userIsOnlineTimeWindow設置爲60,這應該在幾分鐘內完成。任何想法爲什麼發生這種情況?Asp.net會員註銷自動

Im部署到共享主機環境的虛擬目錄。 這裏是我設置的成員資格提供

<membership defaultProvider="FaceMoviesMembership" userIsOnlineTimeWindow="60"> 


<providers> 
<clear/> 
<add name="FaceMoviesMembership" type="System.Web.Security.SqlMembershipProvider" connectionStringName="FaceMoviesAuthConnectionString" 
     enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" maxInvalidPasswordAttempts="10" 
     passwordAttemptWindow="60" requiresUniqueEmail="false" passwordFormat="Clear" applicationName="FaceMoviesWeb" 
     minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0"/> 


</providers> 

回答

2

發現這個Blog的解決方案。這裏有一個摘要:

衆所周知,當在Web場中運行時,您需要指定相同的機器密鑰條目。這是由於以下事實:默認情況下,諸如FormsAuthTicket或ASP.NET MVC中的AntiForgeryToken使用機器密鑰值來加密細節。否則,用戶將被重定向回登錄表單,否則當它們負載平衡到不同的服務器時,驗證將失敗。如果解密結果與FormsAuth的情況下的cookie不匹配,則會發生這種情況。導致用戶不斷想知道他爲什麼必須反覆登錄。

在2個不同的Web主機提供商遇到這個問題後,它發現託管服務提供商啓動了幾個應用的虛擬實例。這將重新創建Web場景場景。

+0

+1好的答案,但可能會更專注一點。 – 2010-05-18 02:36:04

2

如上所述,您的問題可能是一個實例問題。

用於加密/解密/哈希的動態生成的machineKey在每臺機器上都會有所不同,從而導致票證不能被應用程序的不同實例識別。

在web.config中明確指定machineKey部分將確保您的應用程序的所有實例都將遵守票證,而不論其來源如何。

生成這裏的machineKey部分http://www.developmentnow.com/articles/machinekey_generator.aspx

,並貼到您的應用程序的<system.web>部分,使您的應用程序的所有實例都將使用相同的加密密鑰。

這可能會解決您的問題。

+0

謝謝你,我做了什麼,它工作得很好。 – alejandrobog 2010-05-19 15:36:11