我被要求使用一个非常大的Web应用程序并进行部署。我在这里遇到的问题是,当我部署应用程序时,超过1个用户登录系统,会话似乎越过了,即:
人员A登录并在网站上工作,一切都很好。当人B登录时,人A也将以人B的身份登录。
我被要求使用一个非常大的Web应用程序并进行部署。我在这里遇到的问题是,当我部署应用程序时,超过1个用户登录系统,会话似乎越过了,即:
人员A登录并在网站上工作,一切都很好。当B人登录时,A人也将以B人身份登录。
如果有人之前曾经历过这种行为并且可以引导我朝着正确的方向前进,那将是一等奖,二等奖将告诉我如何调试这种情况,以便我可以找出问题所在并解决它
有关该应用程序的一些信息。从我被告知的内容以及我在应用程序中看到的内容是它从.Net 1.1应用程序开始并升级到.Net 2,这就是登录系统按照原样完成的原因。 (该应用程序是巨大的,现在已经完成,这就是为什么我不能重写整个用户身份验证过程,它只需要很长时间,我不知道它可能会产生什么影响)
所有登录用户信息都存储在Global.asax.vb文件中添加的属性中。 (这可能是问题吗?)
非常感谢任何帮助
答案 0 :(得分:1)
服务器上的会话没有交叉,因此实际原因必须是实际上没有两个单独的用户,或者信息实际上并未存储在单独的会话中。
当您从Internet Explorer中的另一个窗口打开新的浏览器窗口时,它们位于同一个浏览器实例中,因此仍然是同一个用户。服务器无法根据会话ID区分窗口,因为它们共享cookie并发送相同的ID。您必须启动一个新实例才能以单独的用户身份登录。
在Firefox中,只有一个实例。即使您尝试启动另一个实例,它也只会在现有实例中打开一个窗口。因此,您无法在单独的窗口中以单独的用户身份登录。
要在用户会话中存储信息,您实际上必须将其存储在Session
对象中。如果您在GLobal
中的global.asax
对象中创建属性,则所有用户都会共享这些属性。即使您使用Session_Start
之类的方法,用户也没有Global
对象的单独实例。
答案 1 :(得分:0)
我们在供应商的代码中遇到了类似的情况。在我们的例子中,问题是由于使用从会话分配的全局静态变量。
答案 2 :(得分:0)
我不认为当从会话中读取用户的身份时,它存储在静态字段而不是基类中的实例字段中是不是?然后从那里写回会话?我以前遇到过这个。