ASP.NET MVC中的会话超时

时间:2017-06-07 08:48:03

标签: c# asp.net-mvc session

我的ASP.Net MVC应用程序出了问题。 我在web.config中有以下内容:

    public void Session_OnStart()
    {
        Session.Timeout = 525600;
    }

这是我的Global.asax

<thead>

有时候它工作正常,但有时候会话在3到5分钟后耗尽。我错过了什么我能做些什么来让会话持续更长时间。 谢谢

更新

有些人怀疑问题是回收时间,但在我的生产服务器上,我没有必要的权利来更改回收时间来测试。 最后,我通过在数据库中手动保存会话数据来修复它,然后当Web会话到期时从数据库获取所需的数据并将它们放回到Web会话中。

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

因为您将模式设置为'inproc'并且正如您所提到的,它有时会起作用,有时也不起作用,因此您的应用程序可能会被回收,从而导致会话重新启动

首先确保没有其他代码更改会话超时

确保应用程序不被回收。

答案 1 :(得分:0)

会话有许多其他方式可以“过期”,例如:

  • 多个选项卡上的用户 - 在一个选项卡上注销,稍后返回另一个选项卡并期望它能够正常工作。
  • 服务器端代码的更改可能导致在服务器上清除会话。
  • 服务器上的代码在Web场(多台计算机)中运行 - 这对于“InProc”会话状态可能会有问题。

网络农场中的InProc

如果您在Web场中并且您的计算机密钥尚未设置为在web.configs中匹配,那么您的注销可能是由于请求转到另一台服务器(auth cookie不会解密)因而未被认证。)

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

答案 2 :(得分:0)

旧问题,但我忘了正式回答。 我们切换到了新服务器,再也没有问题了,所以我再也没有确切地找出问题的根源。 在切换到新服务器以解决问题之前,我进行了故障保护,将会话存储在数据库以及InProc中。 这样,如果首先没有在内存中找到会话,我将检查数据库并从那里获取数据(如果存在)。 谢谢大家的帮助。

相关问题