将会话超时增加到一周或更长时间

Jon*_*ood 14 asp.net asp.net-mvc web-config asp.net-authentication

为了增加会话超时,我似乎会使用以下设置:

<system.web>
  <sessionState mode="InProc" timeout="20" />
  /* Etc... */
</system.web>
Run Code Online (Sandbox Code Playgroud)

此处超时设置为20分钟(默认值).而且,显然,最大值是525,600分钟,或一年.

我可以在一周后回到Facebook,我仍然登录.这就是我希望我的应用程序运行的方式.但根据这个答案,这可能会对性能产生负面影响,因为"您的非活动会话将保留在Web服务器内存中,这可能导致应用程序池回收,这将导致所有用户丢失所有会话."

有谁知道这个性能命中的细节?并且,如果它是真实的,是否有更高效的方式来保持用户登录像Facebook这样的网站?

更新:

下面是我当前web.config文件的相关部分.

<system.web>
  <authentication mode="None" />
  <sessionState mode="InProc" timeout="60" />
  <compilation debug="true" targetFramework="4.6" />
  <httpRuntime targetFramework="4.5.2" executionTimeout="240" maxRequestLength="20480" />
  <httpModules>
    <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
  </httpModules>
  <customErrors mode="Off"></customErrors>
</system.web>
<system.webServer>
  <modules>
    <remove name="FormsAuthentication" />
    <remove name="ApplicationInsightsWebTracking" />
    <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
  </modules>
  <validation validateIntegratedModeConfiguration="false" />
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="20971520" />
    </requestFiltering>
  </security>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

更新2:

看起来我错误地将两个问题(身份验证和会话状态)混为一谈.我为没有正确排序我正在谷歌搜索的一些问题而道歉.我的目标只是延长用户登录的时间.

Aka*_*ava 6

对于登录,您必须使用FormsAuthenticationASP.NET Identity(基于cookie的改进版本的身份验证FormsAuthentication),这允许您将身份验证cookie保留超过数周/月.FormsAuthentication是无状态的,为了支持多个服务器,您可以machineKey在所有服务器中使用single .FormsAuthentication默认情况下,所有示例和教程主要指导使用.

Faceboook和每个人都使用身份验证cookie,没有身体Session用于登录.

理想情况Session是糟糕的,大多是不必要的 它可以替换为HttpRuntime.Cache.可以轻松设置缓存以使用某些外部提供程序,如Fabric缓存或Redis.要使缓存与用户隔离,您只需使用用户名附加缓存项的键即可.

UPDATE

FormsAuthentication除了解密cookie所需的CPU开销很少外,使用没有任何缺点,但通过缓存身份验证票证也可以避免这种情况.

支持的唯一原因Session可能是与ASP他们可能支持的旧应用程序的兼容性.

在新的ASP.NET MVC示例中,他们在代码(启动时)中配置了基于cookie的身份验证,而不是会话.虽然会话是在web.config中配置的,但只要您不想在会话中存储任何内容,就可以完全禁用它.