2011-12-17 68 views
8

我已將sessionState配置爲使用下面的自定義SQL Server並將其設置爲在1分鐘後過期。看起來會話總是保留在瀏覽器和sql服務器上。我甚至將regenerateExpiredSessionId設置爲false,仍然存在相同的問題。我在IIS 7 windows 7專業版下運行asp.net 4.0。ASP.NET sessionState SQLServer模式超時不起作用

我的web.config配置

<sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="Data Source=MYCON\SQL2008REXPRESS;Initial Catalog=DBASPState; User ID=DB1543Write;Password=test" timeout="1" sqlCommandTimeout="10" regenerateExpiredSessionId="false" stateNetworkTimeout="10" compressionEnabled="true" cookieless="false" /> 

我檢查表ASPStateTempSessions在SessionState的數據庫,並在其中看到了記錄。讀寫,所有者權限是當前配置該數據庫的用戶的當前配置。 「Even Viewer」沒有錯誤。

我檢查了ASPStateTempSessions表中的值,下面它看起來像會話是關閉比較5小時比較1分鐘。看起來像asp.net使用另一個時區而不是當前機器時區將其配置爲在1分鐘內過期。

我當前時間是12/17/2011 11:29上午 數據庫列有值CreatedDate(列)2011-12-17 17:29:01.677 Expires(column)2011-12-17 17:30 :03.903

關於數據庫值的全部細節如下。

第一個記錄是當我第一次訪問我的網站

SessionId, Created, Expires, LockDate, LockDateLocal, LockCookie, Timeout, Locked, SessionItemShort, SessionItemLong, Flags 
0wtp4j0traj5e0gydygkyoe22476b033 2011-12-17 17:29:01.677 2011-12-17 17:30:03.903 2011-12-17 17:29:03.873 2011-12-17 11:29:03.873 11 1 False <Binary data> NULL 0 

我按我的瀏覽器「刷新」按鈕後,該紀錄是用新的過期時間更新,但會話信息仍然存在

0wtp4j0traj5e0gydygkyoe22476b033 2011-12-17 17:29:01.677 2011-12-17 17:37:08.910 2011-12-17 17:36:08.907 2011-12-17 11:36:08.907 13 1 False <Binary data> NULL 0 

任何想法?

回答

11

到期時間是UTC。

當SQL會話過期時,它們不會立即從會話表中刪除,也不會收到Session_End事件。

SQL會話提供程序不會主動監視會話表中的Expires列。相反,會話在從表中刪除之前不會「正式」過期,這是通過調用DeleteExpiredSessions存儲過程的SQL代理作業完成的。默認情況下,作業配置爲每60秒運行一次。當然,這意味着SQL代理需要運行才能使會話過期。這也意味着您需要在「實際」到期之前在「名義」到期後至少等待60秒。

如果需要,您可以通過自己調用SP來強制到期。

+0

@JamesSmith這真的適合你嗎?我也面臨同樣的問題,但從表中刪除會話後仍然不註銷。你能提出一些想法嗎? – jkyadav 2016-01-22 07:13:16

相關問題