2017-06-07 139 views
0

我的ASP.Net MVC应用程序有问题。 我在我的web.config以下:在ASP.NET MVC会话超时

<authentication mode="Forms"> 
    <forms loginUrl="~/Login" timeout="525600" /> 
    </authentication> 
    <sessionState mode="InProc" timeout="525600" /> 
<machineKey validationKey="" decryptionKey="" validation="SHA1" decryption="AES" /> 

这在我的Global.asax

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

还有些时候,它工作正常,但有时会仅有3后耗尽 - 5分钟。我错过了什么。有什么我可以做,使会议持续更长时间。 感谢

更新

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

非常感谢您的帮助。

+0

你是怎么测试这个的?你怎么知道它失败了? –

+0

当会话超时时,应用程序处于活动状态并且用户可以注销。 – Naruto

+0

如上所示会话状态模式是InProc,我没有设置EnableSessionState – Naruto

回答

0

因为你设置模式为“进程内”和你提到它为有时有有时没有工作,所以您的应用程序可能导致回收你的会话重新启动

所以首先确保没有其他代码变化会话超时

确保应用程序未被回收。

+0

如何确保应用程序不被回收? – Naruto

+0

日志应用程序启动事件 –

0

还有一些其他的方法可以在session“过期”,例如:在多标签

  • 用户 - 注销一个选项卡上,返回到其它后,预计它的工作。
  • 服务器端代码的更改可能导致会话在服务器上被清除。
  • 服务器上的代码运行在一个Web农场(多台机器)上 - 这对于'InProc'会话状态可能会有问题。

InProc方式对Web场

如果你是一个网络农场和你的机器按键都没有建立在web.configs匹配,那么你的退出可能是由于请求转到另一个服务器(auth cookie不会解密并因此未经身份验证)。

InProc在webfarm情况下无法正常工作。您需要选择另一个方法(SQL Server会话状态是另一个内置选项),这会将会话存储到另一个位置。还有其他第三方选项用于在中央计算机上存储会话状态。

+0

您认为InProc可能会对网络农场有任何想法如何解决它? – Naruto

+0

@Naruto - 请参阅编辑。 – Paddy

+0

我在我的web配置中设置了机器密钥还有其他问题吗? – Naruto