ASP.NET会话状态SQLServer模式超时不';行不通

ASP.NET会话状态SQLServer模式超时不';行不通,asp.net,Asp.net,我已将sessionState配置为使用下面的自定义SQL server,并将其设置为1分钟后过期。会话似乎始终保留在浏览器和sql server上。我甚至将regenerateExpiredSessionId设置为false,但仍然存在相同的问题。我正在IIS 7 windows 7 pro下运行asp.net 4.0 我的web.config配置 <sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnec

我已将sessionState配置为使用下面的自定义SQL server,并将其设置为1分钟后过期。会话似乎始终保留在浏览器和sql server上。我甚至将regenerateExpiredSessionId设置为false,但仍然存在相同的问题。我正在IIS 7 windows 7 pro下运行asp.net 4.0

我的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" />

我检查了sessionstate数据库中的ASPStateTempSessions表,并看到了其中的记录。读和写,所有者权限当前配置为此数据库的当前用户。“偶数查看器”没有错误

我已经检查了ASPStateTempSessions表中的值,在下面,与5小时比较1分钟相比,会话似乎已关闭。似乎asp.net将其配置为使用另一个时区(而不是当前机器时区)在1分钟内过期

我现在的时间是2011年12月17日上午11:29 数据库列的值为CreatedDate(column)2011-12-17 17:29:01.677 过期(列)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
SessionId、已创建、过期、锁定日期、锁定日期本地、锁定cookie、超时、锁定、SessionItemShort、SessionItemLong、标志
0wtp4j0traj5e0gydygkyoe22476b033 2011-12-17 17:29:01.677 2011-12-17:30:03.903 2011-12-17:29:03.873 2011-12-17 11:29:03.873 11 1假空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
0wtp4j0traj5e0gydygkyoe22476b033 2011-12-17 17:29:01.677 2011-12-17:37:08.910 2011-12-17 17:36:08.907 2011-12-17 11:36:08.907 13 1假空0

有什么想法吗?

过期时间是UTC

SQL会话过期时,它们不会立即从会话表中删除,也不会收到会话结束事件

SQL会话提供程序不主动监视会话表中的Expires列。相反,会话在从表中删除之前不会“正式”过期,这是通过调用DeleteExpiredSessions存储过程的SQL代理作业完成的。默认情况下,作业配置为每60秒运行一次。当然,这意味着需要运行SQL代理才能使会话过期正常工作。这也意味着在“名义”过期之后,您需要等待至少60秒,然后才能发生“实际”过期


如果需要,您可以自己调用SP强制过期。

@jamesmith这真的适合您吗?我也面临同样的问题,但在从表中删除会话后仍然没有注销。你能给我一些建议吗?