会话使用aspnet_state服务损坏

cus*_*ar9 9 windows terminal session iis-7

我们有一段时间以来一直遇到数据存储在SQL数据库中的问题.

有时记录的保存数据与行的其余部分不匹配,使得它似乎在某些时候,在传递给数据库之前,数据被"交换"为其他东西,也许是另一个用户的数据.

我们确实使用TransactionScopes和ReadCommitted的隔离级别,这使我认为数据完整性问题在应用程序而不是数据库级别.

我们广泛使用会话,并且我们开始认为损坏数据的时间与我们在白天部署系统更新的时间相似.

我们确实使用aspnet_state服务来通过应用程序重新启动来持久化会话.

我们的用户依赖于终端会话,因此多个用户都登录到同一服务器并通过浏览器启动系统.

我们过去曾注意到用户使用相同的域凭据登录,但我们现在相对确信用户现在使用唯一帐户登录.

99.9%的数据是正确的,但我们一直在努力了解可能导致这种间歇性数据完整性问题的原因.

我们现在将我们的部署限制在工作时间以外的死亡之痛,但这并非总是可行的.

任何人都可以阐明为什么/如何发生这种情况?

编辑:我们现在已将此隔离到DAL层,请参阅SQL查询在多用户环境中返回不正确的值

Hen*_*y24 2

我最近一直在解决这个问题!并且遇到了与您类似的问题,大约 95% 写回的数据是正确的。我研究了各种原因,主要的罪魁祸首是网络上的一些用户下载了 Chrome 并在 Chrome 中打开了记录,破坏了我们的会话 ID,因为 Chrome 忽略了会话。

另一个原因是用户没有关闭浏览器或没有注销应用程序,从而允许同一用户或完全不同的用户选择和使用会话 ID。

在引入浏览器检查然后拒绝 Chrome、教育用户确保他们注销、在繁忙时段之外进行任何更新之后,问题就消失了。

我忘了提一下,在 IIS 上,最好在“输出缓存”中关闭缓存,以便用户和内核设置防止缓存。