2008-09-18 86 views
1

ASP.NET可能会混淆哪个用户与服务器上的哪个会话变量关联?会话变量是否与创建它们的原始用户永久绑定,空间为&维度?在ASP.NET中的会话变量混合?

+0

我有一个会议,他们是,事实上,混淆起来。 http://stackoverflow.com/questions/1646274/asp-net-session-mix-up-using-stateserver-scary – 2009-10-29 21:14:24

回答

2

要回答你的原始问题:会话被键入一个放在cookie中的ID。该ID是使用一些随机数加密例程生成的。并不保证它是独一无二的,但它很可能在会话的整个生命周期内都会被重复。即使您的会话运行了整个工作日。一个真正受欢迎的网站甚至可能需要几年时间才能生成重复的密钥(没有统计数据或事实来支持)。

话虽如此,它似乎并没有出现问题与会话值混在一起。我会开始考虑的第一件事是连接池。ADO默认池连接,但如果您请求与不在池中的用户名/密码进行连接,它应该为您提供新的连接。如果您的网站非常庞大,提示未来可能会成为性能瓶颈。自从我使用SQL Server以来,已经有一段时间了,在Oracle中有一个可以切换用户身份的调用。如果在SQL Server中没有等价物,我会感到惊讶。您可以尝试使用通用用户名/密码连接到数据库,然后在将连接交回其余代码之前执行该标识开关调用。

0

尽管有可能。 。 。 。

不,除非你在sql server或其他一些进程外存储中存储会话状态,然后搞乱它。 。 。

2

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

你看到了什么行为?你确定在你所谈论的变量中没有静态的东西吗?

+0

正确的,静态变量可能会真的错了。 – Biri 2008-09-18 12:36:25

0

会话绑定到用户cookie,在正常情况下出现混乱的几率不太可能,但是如果使用分布式会话状态可能会出现问题。

0

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

你想混淆吗,还是你有混淆的情况?

0

的更多信息:

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

当表得到更新时,我们使用数据库中的'system_user'来标识'last updated by'用户。我们看到一些奇怪的行为,其中我们期望列出的用户不正确,并且显示其他人。

0

你可以弹出调试器,看看是否正确的值传递连接字符串?它会很快帮助你确定问题出在哪个方面。

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

0

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

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