如何在Asp .Net MVC 5中增加会话超时时间?

8

应用程序会在几秒钟内自动注销,我希望将其增加到30分钟。

我已经在web.config文件中编写了一些代码,但它并没有起作用。我查阅了许多相关文章,但仍无法解决问题。

Web.config代码:

<sessionState mode="InProc" timeout="1800"></sessionState>
    <authentication mode="Forms">
      <forms loginUrl="~/Login" timeout="1800">
      </forms>
    </authentication>

你展示的配置是有效的。如果你的会话仍然似乎超时了,那么可能还有其他问题。请解释一下你的托管环境是什么样子的,展示使用会话的相关代码,并且详细说明你所遇到的具体行为。 - CodeCaster
“sessionState”中的“timeout”不应该是以分钟为单位吗?看起来在您的代码中是以秒为单位的(30分钟* 60 = 1800)。” - Csaba Toth
2个回答

4

会话状态和身份验证超时是以分钟为单位而不是秒。因此,您应该有

<sessionState mode="inProc" timeout="30" ></sessionState>
<authentication mode="Forms">
      <forms loginUrl="~/Login" timeout="30">
      </forms>
</authentication>

此外,您应该知道,通过这种方式设置的身份验证将在授予身份验证后的30分钟超时,而会话将延长30分钟以来自最后一次访问。为了使这两个更接近同步,您应该在forms元素中添加slidingExpiration="True"。
如果在这些更改之后仍然在几秒钟后注销您,请注意:
1. 网站是否创建了cookie?它的名称将是.ASPXAUTH,应该是一个会话cookie。 2. 超时发生时,您是否关闭了浏览器? 3. 您是否有多个使用相同身份验证方法的应用程序?

sessionState 的默认值是 slidingExpiration="True",因此无需显式设置。 - Dror
slidingExpiration 强制计时器在某些情况下重新开始过期。但仍有许多原因要更改超时时间。 - Jeff Siver

-1

另一个可以设置这个的地方是在你的Global.asax文件中。如果web.config文件中的sessionState无法工作,建议查看该文件。显然,Global.asax文件将覆盖web.config文件。可以像这样设置:

Session.Timeout = 30;//Timeout expects an integer representing minutes

我做了这个,但是它给了我一个错误:“此上下文中不可用会话状态。” - Manish Tiwari
我不建议这种方法,但我在Session_Start中测试过,没有任何错误。 - QMaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接