Asp.net

將會話超時增加到一周或更長時間

  • August 22, 2017

為了增加會話超時,看來我會使用以下設置:

<system.web>
 <sessionState mode="InProc" timeout="20" />
 /* Etc... */
</system.web>

這裡超時設置為 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>
   &lt;add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" /&gt;
 &lt;/httpModules&gt;
 &lt;customErrors mode="Off"&gt;&lt;/customErrors&gt;
&lt;/system.web&gt;
&lt;system.webServer&gt;
 &lt;modules&gt;
   &lt;remove name="FormsAuthentication" /&gt;
   &lt;remove name="ApplicationInsightsWebTracking" /&gt;
   &lt;add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" /&gt;
 &lt;/modules&gt;
 &lt;validation validateIntegratedModeConfiguration="false" /&gt;
 &lt;security&gt;
   &lt;requestFiltering&gt;
     &lt;requestLimits maxAllowedContentLength="20971520" /&gt;
   &lt;/requestFiltering&gt;
 &lt;/security&gt;
&lt;/system.webServer&gt;

更新 2:

看起來我錯誤地將兩個問題(身份驗證和會話狀態)混為一談。對於我在Google上搜尋的一些問題沒有正確分類,我深表歉意。我的目標只是延長使用者登錄的時間。

對於登錄,您必須使用FormsAuthenticationASP.NET Identity(基於 cookie 的身份驗證的改進版本FormsAuthentication),它允許您將身份驗證 cookie 保留數週/數月以上。FormsAuthentication是無狀態的,為了支持多台伺服器,可以machineKey在所有伺服器中使用single。預設情況下,所有範例和教程大多指導使用FormsAuthentication

Facebook 和每個人都使用身份驗證 cookie,沒有正文Session用於登錄。

理想情況下Session是不好的,而且大多是不必要的。它可以替換為HttpRuntime.Cache. 可以輕鬆設置記憶體以使用一些外部提供程序,例如 Fabric 記憶體或 Redis。要使使用者隔離記憶體,您只需將記憶體項的鍵附加到使用者名即可。

更新

除了解密 cookie 所需的 CPU 成本很小之外,使用沒有任何缺點FormsAuthentication,但也可以通過記憶體身份驗證票證來避免。

支持的唯一原因可能是與他們可能支持Session的舊應用程序的兼容性。ASP

在新的 ASP.NET MVC 範例中,他們在程式碼中(在啟動時)配置了基於 cookie 的身份驗證,這不是會話。雖然 session 是在 web.config 中配置的,但只要你不想在 session 中儲存任何東西,你可以完全禁用它。

引用自:https://stackoverflow.com/questions/45773013