【问题标题】:How to increase session timeout time in Asp .Net MVC 5? [duplicate]如何在 Asp .Net MVC 5 中增加会话超时时间? [复制]
【发布时间】:2016-12-20 09:40:13
【问题描述】:

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

我在 web.config 文件中做了一些代码,但它不起作用。我研究了很多关于它的文章,但我无法解决它。

Web.config 代码:

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

【问题讨论】:

  • 您显示的配置有效。如果您的会话似乎仍然超时,那么还有其他事情正在发生。说明您的托管环境是什么样的,显示使用该会话的相关代码并说明您所经历的具体行为。
  • sessionState timeout 不是应该在几分钟内吗?看起来您的代码将是秒(30 分钟 * 60 = 1800)

标签: c# asp.net asp.net-mvc session-state


【解决方案1】:

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

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

此外,您应该知道,这种设置方式,身份验证将在被授予 30 分钟后超时,而会话将延长 30 分钟以从上次访问开始。为了使这两个更接近同步,您应该在表单元素中添加 rollingExpiration="True"。

如果在进行这些更改后,几秒钟后它仍然让您退出,请查看:

  1. cookie 是在网站中创建的吗?它的名称是 .ASPXAUTH,它应该是一个会话 cookie。
  2. 超时时是否关闭浏览器?
  3. 您是否有多个应用程序使用相同的身份验证方法?

【讨论】:

  • sessionState 默认是slidingExpiration="True" 所以不需要隐式设置
  • slidingExpiration 在某些情况下会强制计时器重新开始到期。但是更改超时时间的原因还有很多。
【解决方案2】:

另一个可以设置的地方是你的Global.asax 文件。如果sessionState 在您的web.config 文件中不起作用,我建议您看看那里。显然Global.asax 文件覆盖web.config 文件。可以这样设置:

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

【讨论】:

  • 我这样做了,但给了我一个错误Session state is not available in this context.
  • 我不建议这种方法,但我在 Session_Start 内部测试它没有任何错误。
猜你喜欢
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 2023-03-18
相关资源
最近更新 更多