0

我从默认的 ASP.net MVC 3 应用程序开始,在 web.config 文件中得到以下内容:

   <authentication mode="Forms">
     <forms loginUrl="~/Account/LogOn" timeout="2880" />
  </authentication>
    <machineKey/>
  <profile defaultProvider="DefaultProfileProvider">
     <providers>
        <add name="DefaultProfileProvider"
             type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
             connectionStringName="DefaultConnection"
             applicationName="/"/>
     </providers>
  </profile>
  <membership defaultProvider="DefaultMembershipProvider">
     <providers>
        <add name="DefaultMembershipProvider"
             type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
             connectionStringName="DefaultConnection" 
             enablePasswordRetrieval="false" 
             enablePasswordReset="true" 
             requiresQuestionAndAnswer="false" 
             requiresUniqueEmail="false" 
             maxInvalidPasswordAttempts="5"
             minRequiredPasswordLength="6" 
             minRequiredNonalphanumericCharacters="0"
             passwordAttemptWindow="10" 
             applicationName="/"                 
            />
     </providers>
  </membership>
  <roleManager enabled="true" defaultProvider="DefaultRoleProvider">
     <providers>
        <add connectionStringName="DefaultConnection"
             applicationName="/"
             name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
     </providers>
  </roleManager>
  <sessionState mode="InProc" customProvider="DefaultSessionProvider">
     <providers>
        <add name="DefaultSessionProvider"
             type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
             connectionStringName="DefaultConnection"
             applicationName="/"/>
     </providers>
  </sessionState>

在本地测试 - 一切正常 - 我去吃午饭,回来,对我的一个控制器(需要身份验证)进行 ajax 调用,它可以工作。

我在托管 Web 服务器上部署 - 我去吃午饭,回来,对控制器进行 ajax 调用 -> 结果我不再登录 - :(。

嗯...现在我可以弄清楚服务器的应用程序池已回收,因此我的会话数据被删除了。

我一直在试图弄清楚我必须进行哪些更改,配置和代码方面,以避免这种情况,但我无法在任何地方找到此信息,或者我可能没有问正确的问题。

当应用程序池回收时,如何确保维护用户的会话(他保持登录状态)?

4

1 回答 1

4

您需要为会话使用数据库或 asp 状态服务器。

http://msdn.microsoft.com/en-us/library/ms178586.aspx

于 2012-08-31T12:26:05.033 回答