当表单身份验证cookie保留时,会话在重新启动后消失

时间:2016-01-09 08:09:53

标签: c# asp.net-mvc

这是我的配置

形式:

<authentication mode="Forms">
<forms loginUrl="~/wms/login" timeout="100"/>
</authentication>

会话:

<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="100">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
  </providers>
</sessionState>

如果用户输入了正确的凭据,他们将获得如下认证:

FormsAuthentication.SetAuthCookie(entry.username, false);

没什么特别的,但我的问题是,如果我将从visual studio重新启动(停止然后重新构建):大多数时候,用户仍然经过身份验证(将被重定向到下一页)但我的下一页需要一个session值,因为会话已经消失,它只会使我的应用程序崩溃。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

  

我该如何解决这个问题?

默认情况下,会话状态存储在内存中(mode="InProc"),并且它将无法在应用程序重新启动后继续存在。您可能需要使用分布式会话状态模式,以便将这些会话保留在状态服务器或数据库中。正是出于这个目的,在生产中你绝对不应该使用内存中的会话状态。

检查不同的状态模式:https://msdn.microsoft.com/en-us/library/ms178586.aspx

以下是切换到分布式会话状态模式时需要了解的内容:您在会话中存储的所有对象及其整个对象图都需要使用[Serializable]属性进行修饰。它们将使用BinaryFormatter类进行序列化,以便通过网络传输到您选择的状态服务器。

答案 1 :(得分:1)

每次停止并重建时,会话都会从服务器中清除。每次停止/启动应用程序时,它都会回收&#34;。我猜你在IIS Express上运行,在这种情况下,每当你停止应用程序时,进程就会被破坏,因此你的会话就会消失。

您可以在此处找到一些有用的信息:asp.net - maintain session while debugging and rebuilding solution?