我使用InProc模式在我的mvc3应用程序中存储会话,但由于每隔20分钟重新启动一次IIS,因此更改了对SQLServer的存储身份验证。与数据库的连接很好,会话正在存储,但是重新启动后身份验证不会持续很长时间
Webconfig
<sessionState mode="SQLServer" timeout="2880" allowCustomSqlDatabase="true"
sqlConnectionString="data source=mydatasource;initial catalog=mydb;user id=userid;password=password;
integrated security=False;MultipleActiveResultSets=True;"
cookieless="true" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" slidingExpiration="true" protection="All" cookieless="UseCookies"/>
</authentication>
答案 0 :(得分:0)
身份验证和会话是完全不同的两件事:
Forms Authentication
ASP.NET Session
区分这些是非常重要的。第一个用于跟踪您网站上经过身份验证的用户。它在您的web.config中的<authentication>
部分中配置,您可以在其中指定cookie的超时和有效性。
另一方面,ASP.NET Session可以独立使用。表单身份验证。在您的示例中,您似乎在应用程序中同时使用它们。因此,请确保它们都具有相同的超时值。
从我所看到的,您已将ASP.NET会话的超时设置为2880.确保您的表单身份验证cookie也配置为相同的数量:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
如果您没有使用表单身份验证,而是使用其他一些机制来跟踪经过身份验证的用户,则问题可能出在其他地方。
答案 1 :(得分:0)
好的,我终于找到了真正的问题。我有机器密钥的随机生成器,当IIS重新启动时,生成了新的machineKey,所以我无法解密auth cookie。解决方案很简单 - &gt;如果您有低级安全站点,请使用静态密钥