【问题标题】:ASP.NET mvc auth or session expires quicker than setASP.NET mvc auth 或会话过期比设置快
【发布时间】:2017-02-13 11:37:48
【问题描述】:

在我的 ASP.NET MVC5 website web.config 中的登录和会话超时如下:

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="~/Account/Login" slidingExpiration="true" timeout="60"/>
  </authentication>
  <sessionState mode="InProc" timeout="60"/>      
</system.web>

会话或身份验证的时间仍为五分钟。我已经接近我的网络托管服务以增加 IIS 中的超时时间,他们在增加 IIS 中的超时时间后共享了@98​​7654322@,但没有任何改变。知道为什么会这样。

【问题讨论】:

    标签: c# asp.net-mvc iis forms-authentication session-timeout


    【解决方案1】:

    这是 IIS 中的 SystemIdleTime 变量的问题。我要求我的托管服务提供商将此值增加到 30 分钟并且它起作用了。

    这表示当应用程序池在 30 分钟内没有请求时关闭,我的所有会话变量都将被清除。此值将覆盖网站 web.cofig 中设置的会话超时。您可以将其设置为 0 以指示应用程序池永远不会关闭,然后您可以通过 web.config 控制会话的超时。我也发现这个不错article

    【讨论】:

      【解决方案2】:

      首先,尝试在 Global.asax 中的Session_Start 方法上设置会话超时:

      void Session_Start(object sender, EventArgs e)
      {
          Session.Timeout = 60;
      }
      

      注意:通过使用进程内会话状态,您的会话将清除每个 IIS 应用程序池回收,这在您的问题应用程序池中会在 5 分钟后回收。

      如果上述尝试不起作用并且您可以访问服务器的 IIS 管理,请执行以下步骤:

      1. 打开 IIS 管理器。
      2. 选择应用程序池 => [您的应用程序池名称] => 回收/高级设置。
      3. 启用 Regular time interval (minutes) 并将其设置为 60,然后应用您的更改。

      如果您无法同时访问 IIS 管理器和 SQL Server 配置,您可能想尝试基于 DB 的会话状态管理,而不是 InProc 模式(请参阅下面的 MSDN 参考)。

      基于数据库的会话状态需要将模式属性更改为SQLServer,例如:

      <system.web>
          <sessionState mode="SQLServer" sqlConnectionString="Integrated Security=SSPI;Data Source=SERVERNAME;Initial Catalog=DATABASE" />
      </system.web>
      

      参考:

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

      Session expires too quickly in asp.net mvc4 application

      【讨论】:

      • 非常感谢 Yamamoto san,这是 IIS 中的 SystemIdleTime 变量的问题。我要求我的托管服务提供商更改此值并且它起作用了。我也发现了这个好article
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 2013-11-23
      • 2012-02-05
      相关资源
      最近更新 更多