这是我的配置
形式:
<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
值,因为会话已经消失,它只会使我的应用程序崩溃。
我该如何解决这个问题?
答案 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?