將會話超時增加到一周或更長時間
為了增加會話超時,看來我會使用以下設置:
<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> <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:
看起來我錯誤地將兩個問題(身份驗證和會話狀態)混為一談。對於我在Google上搜尋的一些問題沒有正確分類,我深表歉意。我的目標只是延長使用者登錄的時間。
對於登錄,您必須使用
FormsAuthentication或ASP.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 中儲存任何東西,你可以完全禁用它。