2011-08-19 41 views
5

我也行:爲什麼設置爲SqlServer時會話超時工作不正常?

<sessionState mode="SQLServer" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" /> 

其中在SQL狀態服務器存儲會話。但一分鐘後它不會正常超時。

當我改變行使用是InProc模式:

<sessionState mode="InProc" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" /> 

它做一分鐘超時後。

任何想法爲什麼會發生這種情況?如何在使用SqlServer時使其超時?

回答

6

如果您使用的是SQL Server Express,那是因爲沒有SQL Server代理來執行DeleteExpiredSessions過程。

這裏是一個可能的解決方法的問題:

在這種更新會話存儲過程中,我加入SQL 從DeleteExpiredSessions程序存儲 程序(我不記得更新會話名稱),因此它檢查舊會話, 刪除舊會話,然後更新當前會話。更新會話的 存儲過程無論如何都會在每次點擊上運行,因此我還添加了兩行,在更新會話 之前刪除舊會話。這似乎工作正常。

1

您可以通過設置窗體身份驗證cookie的超時控制session的超時:

FormsAuthenticationTicket authTicket = 
new FormsAuthenticationTicket(1, // version 
txtUserName.Text, 
DateTime.Now, 
DateTime.Now.AddMinutes(1), 
false,@"\"); 

這樣,用戶就失去與1分鐘後會話接觸。

+0

表單身份驗證超時和會話超時是兩個單獨的事情。 – KingOfHypocrites

6
  1. 確保SQL Server代理服務正在運行

  2. 右擊名爲ASPState_Job_DeleteExpiredSessions SQL Server代理作業,然後單擊「查看歷史記錄」 - 確保該作業成功運行的每個1分鐘。

在我的情況下,以某種方式(可能是在涉及命名實例多個安裝的一個)我的SQL Server代理有其財產Connection -> Alias Localhost Server組只在服務器名稱,而不是服務器名稱\實例。

發生此更改時,ASPState_Job_DeleteExpiredSessions似乎無限期運行,無法停止。所以,我試圖重新啓動SQL Server代理服務,但它不會重新啓動。但是,一旦我將Connection -> Alias Localhost Server屬性更改爲servername \ instancename,SQL Server代理就開始正確備份,並且ASPState_Job_DeleteExpiredSessions作業每分鐘成功啓動一次,就像它應該.....這顯然解決了我的超時問題。

+0

謝謝,這對我有用 –

相關問題