使用SQL Server存储身份验证时丢失身份验证

时间:2013-03-14 08:15:02

标签: sql-server asp.net-mvc-3 session session-storage

我使用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>

Screenshot of my database

2 个答案:

答案 0 :(得分:0)

身份验证和会话是完全不同的两件事:

  1. Forms Authentication
  2. ASP.NET Session
  3. 区分这些是非常重要的。第一个用于跟踪您网站上经过身份验证的用户。它在您的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;如果您有低级安全站点,请使用静态密钥

相关问题