1

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

4

8 回答 8

2

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

你看到了什么行为?你确定你所说的变量没有静态因素吗?

于 2008-09-18T12:29:43.743 回答
2

回答您最初的问题:会话被键入到放置在 cookie 中的 id。这个 id 是使用一些随机数加密例程生成的。它不能保证是唯一的,但在会话的整个生命周期内它极不可能被复制。即使您的会话持续了整个工作日。一个非常受欢迎的网站甚至可能需要数年时间才能生成一个重复的密钥(没有统计数据或事实来支持它)。

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

于 2008-09-18T13:35:55.020 回答
0

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

不,除非您将会话状态存储在 sql server 或其他进程外存储中,然后将其弄乱。. .

于 2008-09-18T12:29:19.733 回答
0

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

于 2008-09-18T12:29:58.500 回答
0

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

你想混在一起,或者你有一个看起来混在一起的情况吗?

于 2008-09-18T12:30:36.720 回答
0

更多信息:

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

当表被更新时,我们在数据库中使用“system_user”来识别“最后更新者”用户。我们看到一些奇怪的行为,其中我们期望列出的用户不正确,它显示的是其他人。

于 2008-09-18T12:51:49.523 回答
0

您可以弹出调试器并查看是否确实在该连接字符串上传递了正确的值?它会很快帮助您确定问题出在哪一边。

还要确保没有任何连接代码具有连接或用户的静态属性,或者一个用户可能在更新触发之前将其连接替换为最新用户的连接。

于 2008-09-18T13:02:36.223 回答
0

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

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

于 2008-09-18T13:27:58.113 回答