【问题标题】:MVC 5 Session expires at every 15 minuteMVC 5 会话每 15 分钟到期一次
【发布时间】:2017-09-11 11:35:08
【问题描述】:

我正在使用 MVC5。在每 15 分钟或会话到期之前 下面是我在 web.config 文件中添加的代码

身份验证模式="无" sessionState 模式="InProc" 超时="20" 请帮我。 谢谢

【问题讨论】:

  • 你添加的代码在哪里?
  • 您似乎混淆了会话和身份验证。他们是两个不同的东西。你是什​​么意思?是否需要您重新登录,还是您的会话变量消失了?
  • 我认为这对你有用:stackoverflow.com/questions/17741775/…
  • 在@AlsamilMehboob 的链接中有一个答案,其中包含编写<authentication> 及其子<forms> 标签的正确方法:https://stackoverflow.com/a/17741890/1361831

标签: asp.net-mvc asp.net-mvc-5 session-state


【解决方案1】:

InProc 会话存储在内存中并与进程相关联。换句话说,它是易失的:既因为内存可以回收,也因为进程可以被杀死。特别是应用程序池默认设置为定期回收,也可能会崩溃,或者 IIS 或服务器本身可能会重新启动。所有这些都会破坏任何活动的会话。

InProc 实际上只在开发中可行,让您不必设置一个实际的会话存储,只是为了玩一些代码。在生产中,您应该始终使用其他东西,例如 SQL Server 或 Redis。即使在开发过程中,同样重要的是要认识到,由于它与进程相关联,因此停止和重新启动调试之类的操作将终止 IIS Express 进程,从而终止会话状态。

【讨论】:

  • 你能给我解决如何在 MVC 5 中管理会话
【解决方案2】:

您可以通过在 web.config 中添加以下行来增加会话超时

以分钟为单位的超时

<sessionState timeout="120">
</sessionState>

【讨论】:

  • 我已经这样做了,并设置了 20 分钟,但它不起作用
【解决方案3】:

如果您在 IIS 中托管您的网站,并且您在 15 分钟内没有向您的网站发出任何请求,那么很可能应用程序池已被回收。这意味着存储在内存中的所有数据(如您指定 mode="InProc" 的会话状态)都已丢失,并且在 15 分钟后访问该网站时创建了一个新线程。如果是这种情况,您会很容易注意到,因为应用程序池启动时间可能需要 10 到 30 秒 - 这解释了为什么第一个请求需要这么长时间才能呈现,而后续请求要快得多。

如果这发生在您的本地计算机上,则对您的代码进行任何重新编译都会产生相同的效果。

另一种可能性是您在负载平衡器后面,并且第二个请求没有发送到为第一个请求提供服务的同一物理服务器。 (很明显,第二台服务器不知道第一台服务器内存中的内容)

由于这些原因,最好避免使用 mode="InProc"。您不想在生产中使用 mode="InProc" ,最好在开发中坚持相同的设置,这样您就可以及早发现任何问题。

【讨论】:

    【解决方案4】:

    我有类似的设置

    <sessionState mode="InProc" cookieless="false" timeout="20" />
    

    将其设置为 20 分钟。

    【讨论】:

      猜你喜欢
      • 2016-11-10
      • 2017-05-09
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多