【问题标题】:MVC: session InProc vs StateserverMVC:会话 InProc 与 Stateserver
【发布时间】:2015-07-23 03:37:39
【问题描述】:

整天都在追捕这个。

如果我使用“StateSever”,我可以让会话正常工作。保持从控制器到控制器和刷新的会话。如果我使用“InProc”,则会话从控制器到控制器,但在刷新时它会死掉 [null]。超时应该不是问题,因为我会立即运行它。

对此的任何帮助表示赞赏。我真的不想使用 stateserver...至少在我明白为什么会这样之前。

网络配置

<!--<sessionState cookieless="UseCookies" timeout="1440" mode="InProc"/>-->
  <sessionState cookieless="UseCookies" timeout="1440" mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"/>

控制器

    public ActionResult Login()
    {
        System.Web.HttpContext.Current.Session["SessionVal"] = "Test";
        return View();
    }

    public ActionResult LoginSuccess()
    {
        return View();
    }

观看次数

@{
Layout = "";
}
<h2>Login</h2>
<a href="/Login/LoginSuccess">Go Here</a>

第二个视图

@{
Layout = null;
}
Session:  @Session["SessionVal"]

【问题讨论】:

  • 你是在 Web Farm 还是 Web Garden 上运行?
  • 不,我现在在本地运行...dev PC
  • 能否从 web.config 中彻底删除 sessionState 标签并再次调试?
  • 我希望这是有道理的。我在 Web 配置中禁用了会话状态。我在会话中放置了一个 DateTime 第一次运行项目时,它会显示会话。我按 F5,它会重新创建会话。我继续按F5,它成立。我启用了 stateserver 并执行相同的过程,但它不会在第一次刷新时重新创建会话。

标签: asp.net-mvc session


【解决方案1】:

我在网络配置中禁用了会话状态。我把日期时间放在 session 我第一次运行项目时,它会显示会话。我 按 F5,它会重新创建会话。我继续按F5,它成立。 我启用了 stateserver 并执行相同的过程,但它从不重新制作 第一次刷新时的会话。

默认情况下,sessionState 是 InProc 模式。 InProc 表示 Session 存储在 Web 服务器的内存中。 如果你在 Visual Studio 中调试,它将是你本地计算机的内存。

由于内存不是持久存储,因此一旦您的应用程序停止,垃圾收集器就会清除 sessionState。

底线是这是设计使然,您对此无能为力。

如果你想在应用程序停止后保持 sessionState,你需要使用 StateServerSQLServer

【讨论】:

    【解决方案2】:

    InProc 的字面意思是处理中。它随着它运行的进程而生和死。 IIS Express 是一个一次性的服务器——从字面上看。 Visual Studio 一直启动和停止 IIS Express 的原因有很多。例如,每次停止调试时,默认情况下 IIS Express 都会被终止(尽管可以逐个项目更改)。

    即使在服务器上使用真正的 IIS,InProc 会话也很不稳定。它们在本地开发盒上的 IIS Express 上更是如此。如果您需要或希望请求之间会话数据的稳定性,那么您需要使用 InProc 以外的其他东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 2017-05-11
      • 1970-01-01
      相关资源
      最近更新 更多