ASP.NET中的会话变量混合?

时间:2020-03-06 14:21:02  来源:igfitidea点击:

ASP.NET是否有可能混淆哪个用户与服务器上的哪个会话变量相关联?会话变量是否一成不变地与在时间,空间和维度上创建它们的原始用户联系在一起?

解决方案

虽然一切皆有可能。 。 。 。

否,除非我们将会话状态存储在sql server或者其他进程外存储中,然后将其弄乱。 。 。

这取决于会话提供程序,如果我们已经以不再唯一的方式覆盖了会话密钥生成,那么多个用户可能正在访问同一会话。

我们看到什么行为?我们确定所讨论的变量没有静态作用吗?

会话绑定到用户cookie,在正常情况下发生混乱的可能性很小,但是如果使用分布式会话状态,则可能会出现问题。

这是不可能的。会话与创建者相关。

我们是否要混淆,或者我们有看起来像混淆的情况?

更多信息:

我有一个应用程序,该应用程序从登录页面获取用户ID /密码并将其存储在会话变量中。我将其放入连接字符串中以调用SQL Server。

更新表格后,我们在数据库中使用" system_user"来标识"最后更新者"用户。我们看到了一些奇怪的行为,在这些行为中,我们希望被列出的用户是不正确的,并且正在显示其他人。

我们可以弹出调试器,看看是否确实在该连接字符串上传递了正确的值吗?它将迅速确定问题所在的哪一方面。

此外,请确保没有任何连接代码具有针对连接或者用户的静态属性,或者在更新触发前,一个用户的连接可能已被最新用户的连接替换。

我的猜测是,我们正在重用类的静态字段来保存连接字符串。这些静态字段可在多个IIS请求中重复使用,因此我们可能只会在"最后更新者"中看到最近登录的用户。

顺便说一句,除非我们有充分的理由这样做,否则我们不应该这样连接数据库。我们正在阻止自己使用连接池,这会损害高负载下的性能。

回答原始问题:会话被键入到放置在Cookie中的ID的键。此ID是使用一些随机数加密例程生成的。它不能保证是唯一的,但是在会话的整个生命周期中都不太可能被复制。即使会话运行了整个工作日。一个真正受欢迎的网站可能甚至需要数年才能生成一个重复的密钥(没有任何统计数据或者事实来支持该密钥)。

说了这么多,似乎问题似乎不是会话值混淆了。我首先要看的是连接池。默认情况下,ADO池连接,但是如果我们请求的连接使用不在池中的用户名/密码,则它应该为我们提供一个新的连接。如果站点很大,则提示可能是将来的性能瓶颈。自从我使用SQL Server以来已经有一段时间了,在Oracle中,可以进行一个调用来切换用户的身份。如果SQL Server中没有等效项,我会感到惊讶。我们可以尝试使用通用的用户名/密码连接到数据库,然后执行身份切换调用,然后再将连接移交给其余代码。