MVC 5会话每15分钟到期一次

时间:2017-09-11 11:35:09

标签: asp.net-mvc asp.net-mvc-5 session-state

我正在使用MVC5。每15分钟或会议结束前 下面是我在web.config文件中添加的代码

身份验证模式=“无” sessionState mode =“InProc”timeout =“20” 请帮我。 谢谢

4 个答案:

答案 0 :(得分:1)

InProc会话存储在内存中并与进程绑定。换句话说,它是不稳定的:因为可以回收内存并且可以杀死进程。特别是应用程序池默认设置为定期循环,也可能崩溃,或者IIS或服务器本身可以重新启动。所有这些都会破坏任何活跃的会话。

InProc实际上只在开发中可行,可以让您不必设置实际的会话存储,只需要使用一些代码。在生产中,您应该始终使用其他东西,例如SQL Server或Redis。即使在开发过程中,重要的是要意识到,再次,由于它与流程相关联,执行诸如停止和重新启动调试之类的操作将会导致IIS Express进程停止,从而导致会话状态失效。

答案 1 :(得分:0)

您可以通过在web.config

中添加以下行来增加会话超时

分钟超时

<sessionState timeout="120">
</sessionState>

答案 2 :(得分:0)

如果您在IIS中托管您的网站并且您未在15分钟内向您的网站发出任何请求,那么应用程序池可能已被回收。这意味着存储在内存中的任何数据(如指定mode =“InProc”的会话状态)都已丢失,并且在15分钟后访问网站时创建了一个新线程。您很容易注意到是否是这种情况,因为应用程序池启动时间可能需要10到30秒 - 这就解释了为什么第一个请求需要花费很长时间才能呈现,后续请求要快得多。

如果在本地计算机上发生这种情况,则对代码进行任何重新编译都会产生相同的效果。

另一种可能性是您在负载均衡器后面,并且第二个请求不会转到为第一个请求提供服务的同一物理服务器。 (显然,第二台服务器不知道第一台服务器上的内存是什么)

出于这些原因,最好避免使用mode =“InProc”。您不希望在生产中使用mode =“InProc”,最好在开发中坚持使用相同的设置,这样您就可以及早发现任何问题。

答案 3 :(得分:0)

我有类似的设置

<sessionState mode="InProc" cookieless="false" timeout="20" />

将其设置为20分钟。