2013-03-14 153 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