【问题标题】:ASP.NET MVC - Session cookies seem to expire faster than timeout set?ASP.NET MVC - 会话 cookie 似乎比超时设置更快过期?
【发布时间】:2015-09-29 11:26:16
【问题描述】:

我将一些数据存储在会话 cookie 中。例如用户 ID。我将超时设置为 60 分钟后过期,如下所示:

 <configuration>
  <system.web>
     <sessionState timeout="60"></sessionState>
  </system.web>
</configuration>

但有时它会在 10 分钟左右到期。我不知道为什么。有什么我遗漏的吗?

【问题讨论】:

  • 可能是由于一些未处理的内部异常
  • @DCODE 你能详细说明一下吗?我使用会话 cookie 的唯一方法是存储登录信息,并检查“Session["Id"] == null”是否重定向到登录页面。

标签: asp.net asp.net-mvc session cookies


【解决方案1】:

IIS/.NET 的默认会话提供程序是 InProc,它是 In Process(即易失性内存)的缩写。这意味着,如果出于任何原因,进程重新启动,所有会话数据都将丢失,因为当可执行文件重新启动/关闭时,存储在进程中的数据会丢失。默认情况下,IIS Web 应用程序会在一段时间后关闭,这会导致所有会话数据丢失。这还可以包括启动和停止调试会话(根据下面的评论)。

另一个可能的问题是,如果您要部署到服务器场。 InProc 会话不能在多个 Web 服务器之间共享。

如果您要部署到单个服务器并且您可以控制配置,请检查进程(应用程序池)设置为回收或超时的频率。您可能希望增加此超时时间以更好地满足您的会话要求。

如果您要部署到网络场(多台机器或云托管)或无法控制服务器配置,那么您应该考虑在您的应用程序中实现类似 Sql Session State provider 的东西。这将为存储可以在多个 Web 服务器之间共享的会话数据提供唯一来源,并且数据的存储独立于正在运行的进程,因此它可以在进程重新启动/崩溃后继续存在。

【讨论】:

  • 啊,我认为您的第一段是有道理的。我一直在调试,所以这肯定是原因。谢谢你!我明天会在工作中研究这个
  • 我无法确认答案,但我相信这是正确的。谢谢
【解决方案2】:

尝试记录会话过期的原因

设置 web.config

<configuration>
  <system.web>
     <sessionState mode="InProc" timeout="20"></sessionState>
  </system.web>
</configuration>

在 global.asax 上

void Session_End(object sender, EventArgs e)
    {
        // Write your code to capture log

    }

【讨论】:

    猜你喜欢
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2020-04-10
    • 2013-02-02
    相关资源
    最近更新 更多