Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC中的会话超时_C#_Asp.net Mvc_Session - Fatal编程技术网

C# ASP.NET MVC中的会话超时

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=""

我的ASP.NETMVC应用程序有问题。 我的web.config中有以下内容:

  <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网站农场

如果您在web场上,并且您的计算机密钥未在web.configs中设置为匹配,则您的注销可能是由于请求转到另一台服务器(在该服务器上,身份验证cookie不会解密,因此将取消身份验证)


InProc在webfarm环境中工作不好。您需要选择另一种方法(SQL Server会话状态是另一个内置选项),它将会话存储带到不同的位置。还有其他第三方选项可用于在中央计算机上存储会话状态。

旧问题,但我忘了正式回答它。 我们换了一台新服务器,再也没有问题了,所以我从来没有确切地找出问题的原因。 在切换到一个新的服务器来处理这个问题之前,我做了一个故障保护,它将会话存储在数据库和InProc中。 这样,如果在内存中首先找不到会话,我将检查数据库并从那里获取数据(如果存在)。
谢谢大家的帮助。

您是如何测试的?您如何注意到它失败了?应用程序处于活动状态,当会话超时时用户将注销。如上所示,会话状态模式为InProc,我没有设置EnableSessionStateanywhere@Naruto:我认为会话已过期,因为IIS/服务器/网站可能已重新启动。好的,有什么办法可以防止或影响它吗?我该怎么做确定应用程序没有被回收?记录应用程序启动事件你说InProc对web farm来说可能有问题。有什么解决方法吗?我的web配置中设置了一个机器密钥。还有其他问题吗?@Naruto-不仅仅是机器密钥。您的会话状态存储在您访问的服务器的内存中。如果您被路由到另一台机器,则该服务器上将不存在该机器。这取决于你是如何编码的,这可能是你的问题。你说这取决于我是如何编码的。你有什么建议我如何正确编码吗?我问这个问题的原因是,如果可能的话,我试图避免更改会话状态模式。对不起,这取决于您如何使用会话中输入的内容。这里的要点是,如果您使用的是webfarm和循环式路由,InProc会话状态将不适用于您。
    public void Session_OnStart()
    {
        Session.Timeout = 525600;
    }