我正在使用MVC5。每15分钟或会议结束前 下面是我在web.config文件中添加的代码
身份验证模式=“无” sessionState mode =“InProc”timeout =“20” 请帮我。 谢谢
答案 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分钟。