C# ASP.NET MVC中的会话超时
我的ASP.NETMVC应用程序有问题。 我的web.config中有以下内容:C# ASP.NET MVC中的会话超时,c#,asp.net-mvc,session,C#,Asp.net Mvc,Session,我的ASP.NETMVC应用程序有问题。 我的web.config中有以下内容: <authentication mode="Forms"> <forms loginUrl="~/Login" timeout="525600" /> </authentication> <sessionState mode="InProc" timeout="525600" /> <machineKey validationKey=""
<authentication mode="Forms">
<forms loginUrl="~/Login" timeout="525600" />
</authentication>
<sessionState mode="InProc" timeout="525600" />
<machineKey validationKey="" decryptionKey="" validation="SHA1" decryption="AES" />
虽然有时效果还不错,但有时只需3-5分钟就可以结束。我错过了什么。我能做些什么来延长会议的时间吗。
多谢各位
更新
你们中的一些人怀疑问题在于回收时间,但在我的生产服务器上,我没有必要更改回收时间来测试这一点。
最后,我通过手动将会话数据保存到数据库中,然后在web会话过期时从数据库中获取所需的数据并将它们放回web会话中,从而解决了这个问题
感谢您的帮助。因为您将模式设置为“inproc”,并且正如您所提到的,它有时工作,有时不工作,所以您的应用程序可能会被回收,从而导致会话重新启动 因此,首先确保没有其他代码更改会话超时
确保应用程序不会被回收。会话可能“过期”的其他方式有很多,例如:
- 多个选项卡上的用户-在一个选项卡上注销,稍后返回到另一个选项卡,并期望它正常工作
- 服务器端代码的更改可能会导致在服务器上清除会话
- 服务器上的代码在web场(多台计算机)中运行—对于“InProc”会话状态,这可能会有问题
InProc在webfarm环境中工作不好。您需要选择另一种方法(SQL Server会话状态是另一个内置选项),它将会话存储带到不同的位置。还有其他第三方选项可用于在中央计算机上存储会话状态。旧问题,但我忘了正式回答它。 我们换了一台新服务器,再也没有问题了,所以我从来没有确切地找出问题的原因。 在切换到一个新的服务器来处理这个问题之前,我做了一个故障保护,它将会话存储在数据库和InProc中。 这样,如果在内存中首先找不到会话,我将检查数据库并从那里获取数据(如果存在)。
谢谢大家的帮助。您是如何测试的?您如何注意到它失败了?应用程序处于活动状态,当会话超时时用户将注销。如上所示,会话状态模式为InProc,我没有设置EnableSessionStateanywhere@Naruto:我认为会话已过期,因为IIS/服务器/网站可能已重新启动。好的,有什么办法可以防止或影响它吗?我该怎么做确定应用程序没有被回收?记录应用程序启动事件你说InProc对web farm来说可能有问题。有什么解决方法吗?我的web配置中设置了一个机器密钥。还有其他问题吗?@Naruto-不仅仅是机器密钥。您的会话状态存储在您访问的服务器的内存中。如果您被路由到另一台机器,则该服务器上将不存在该机器。这取决于你是如何编码的,这可能是你的问题。你说这取决于我是如何编码的。你有什么建议我如何正确编码吗?我问这个问题的原因是,如果可能的话,我试图避免更改会话状态模式。对不起,这取决于您如何使用会话中输入的内容。这里的要点是,如果您使用的是webfarm和循环式路由,InProc会话状态将不适用于您。
public void Session_OnStart()
{
Session.Timeout = 525600;
}