MVC:会话InProc与Stateserver

时间:2015-07-22 16:51:42

标签: asp.net-mvc session

试着整天打猎。

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

对此有任何帮助表示赞赏。我真的不想使用状态服务器......至少在我理解为什么会发生这种情况之前。

网络配置

<!--<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"]

2 个答案:

答案 0 :(得分:2)

  

我在web配置中禁用了会话状态。我把日期时间放在了   session我第一次运行项目时会显示会话。一世   点击F5然后重拍会话。我继续击中F5并持续下去。   我启用了stateserver并执行相同的过程,但它从未重新创建过   第一次刷新会议。

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

由于内存不是持久存储,因此只要应用程序停止,就会通过垃圾收集器清除sessionState。

底线是它是设计,你无能为力。

如果您希望在应用程序停止后仍保持sessionState,则需要使用 StateServer SQLServer

答案 1 :(得分:1)

InProc字面意思是正在进行中。它与正在运行的过程一起生存和死亡。 IIS Express是一个一次性服务器 - 非常字面。由于各种原因,Visual Studio始终启动和停止IIS Express。例如,每次停止调试时,默认情况下都会终止IIS Express(尽管可以逐个项目地更改它)。

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