Sql server 使用SQLServer存储身份验证时丢失身份验证

Sql server 使用SQLServer存储身份验证时丢失身份验证,sql-server,asp.net-mvc-3,session,session-storage,Sql Server,Asp.net Mvc 3,Session,Session Storage,我在mvc3应用程序中使用InProc模式存储会话,但由于大约每20分钟重新启动一次IIS,SQLServer的存储身份验证发生了变化。与数据库的连接正常,会话正在存储,但身份验证不会持续很长时间,重启后会丢失 网络配置 <sessionState mode="SQLServer" timeout="2880" allowCustomSqlDatabase="true" sqlConnectionString="data source=mydatasource;initial ca

我在mvc3应用程序中使用InProc模式存储会话,但由于大约每20分钟重新启动一次IIS,SQLServer的存储身份验证发生了变化。与数据库的连接正常,会话正在存储,但身份验证不会持续很长时间,重启后会丢失

网络配置

<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>


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

  • 区分这些是非常重要的。第一个用于跟踪网站上经过身份验证的用户。它在web.config的
    部分中配置,您可以在其中指定cookie的超时和有效性

    另一方面,ASP.NET会话可以独立使用。身份验证的形式。在您的示例中,您似乎在应用程序中同时使用了这两种方法。因此,请确保它们都具有相同的超时值

    据我所知,您已将ASP.NET会话的超时设置为2880。确保表单验证cookie也配置为相同的数量:

    <authentication mode="Forms">
        <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    
    
    

    如果您不是使用表单身份验证而是使用其他机制来跟踪经过身份验证的用户,那么问题可能出在其他地方。

    好的,我终于找到了真正的问题所在。我有machineKey的随机生成器,当IIS重新启动时,会生成新的machineKey,因此我无法解密身份验证cookie。解决方案很简单->如果您有低级安全站点,请使用静态密钥

    表和过程由installsqlstate创建。sqlI将我的身份验证从webcofig添加到以前的postForms身份验证使用Cookie跟踪经过身份验证的用户。这些cookie可以在IIS重新启动后存活,因为它们位于客户端上。与FireBug一起检查到底发生了什么。重新启动后是否发送表单验证cookie(通常应该发送)。我刚刚检查了它,cookie正在发送