【发布时间】:2018-01-28 02:32:54
【问题描述】:
为了增加会话超时,看来我会使用以下设置:
<system.web>
<sessionState mode="InProc" timeout="20" />
/* Etc... */
</system.web>
这里的超时设置为 20 分钟(默认值)。而且,显然,最大值是 525,600 分钟,即一年。
我可以在一周后返回 Facebook,但我仍处于登录状态。这就是我希望我的应用程序的行为方式。但根据this answer 的说法,这会对性能产生不利影响,因为“您的非活动会话将保留在 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>
更新 2:
看起来我错误地将两个问题(身份验证和会话状态)混为一谈。对于我在谷歌上搜索的一些问题没有正确分类,我深表歉意。我的目标只是延长用户登录的时间。
【问题讨论】:
-
我敢打赌,Facebook 没有保留服务器端版本,它完全是无状态的,他们(可能)收到一个带有身份验证 cookie 的请求,然后发送响应
-
@YvetteColomb - 好吧,它们确实是两个不同的东西。 ASP.NET Session 不是身份验证(默认情况下,它依赖于一个自动的 guid-like-that-you-cannot-guess cookie),它是为当前连接的事物/东西/任何东西创建的状态包。 Auth 是 Jonathan 需要根据他的上下文设置的另一个过程
-
@YvetteColomb 如果你想批评我是如何提出这个问题的,那就试试吧。但在最初的问题中,我说我可以在一周后回到 Facebook 并且我仍然登录。这就是我希望我的应用程序的行为方式。这仍然是我想要的。
-
你应该可以在Code\Startup.Auth.cs里面修改CookieAuthenticationOptions的定义,添加ExpireTimeSpan=你想要的。如果您不使用 ASP.NET 会话,则应将其完全删除(关闭)
-
@JonathanWood 你能告诉我们你如何验证用户的代码吗?
标签: asp.net asp.net-mvc web-config asp.net-authentication