2013-03-14 154 views
0

我使用InProc模式将会话存储在我的mvc3应用程序中,但由于每20分钟重新启动IIS,所以存储身份验证更改为SQLServer。连接到数据库是好的,在会话中储存,但认证犯规持续很长的重启在使用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

+0

表和installsqlstate.sql – 2013-03-14 08:19:06

回答

0

好吧,我终于发现真正的问题是什么。我有machineKey的随机生成器,并且当IIS重新启动时,生成了新的machineKey,所以我无法解密auth cookie。解决方法很简单 - >使用静态密钥,如果你有低级别的安全网站

0

认证和会话丢失后2件完全不同的事情:

  1. Forms Authentication
  2. ASP.NET Session

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

另一方面ASP.NET会话可以独立使用。表单身份验证。在你的例子中,你似乎在你的应用程序中使用了两者。所以请确保它们都具有相同的超时值。

从我可以看到你设置超时为ASP.NET会议将2880请确保您的窗体身份验证cookie也被配置为相同金额:

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

如果你不使用表单身份验证,但其他一些机制来跟踪您的身份验证用户,那么问题可能在其他地方。

+0

创建程序,我从加入我的webcofig验证,以前的帖子 – 2013-03-14 08:22:31

+0

窗体身份验证使用cookie来跟踪验证的用户。这些cookie可以在IIS重启后继续存在,因为它们位于客户端上。用FireBug检查究竟发生了什么。重新启动后是否发送表单身份验证Cookie(通常应该)。 – 2013-03-14 08:25:21

+0

我刚刚检查过它,cookie正在发送 – 2013-03-14 12:21:18