在我的网站项目中,我使用的是静态列表。所以假设我有两个用户(A,B)同时登录我的网站,那么这个List将存储一些关于A和B的信息。但是当我处理B List的记录时,A的列表正在获得处理而不是B的。
有人可以指出问题吗?还请建议我一些可能的解决方案来避免这个问题。
我正在使用ASP.NET C#3.5。
提前谢谢你:)
修改
现在我已经将数据类型从Dictionary更改为List,但仍然存在同样的问题......
答案 0 :(得分:1)
static
变量是特定类的所有实例的相同的变量。所以这意味着您的网站使用完全相同的字典用于用户A,B,C,D等。基本上,无论用户最后写入字典的是哪个内容您将看到的内容,无论哪个用户正在寻找。
正如其他人所建议的那样,您可以使用Session
个变量。它们存储在服务器的内存中,并与特定的浏览器“会话”(即用户)相关。
就个人而言,我更喜欢使用ViewState
,因为它存储在对浏览器的响应中,并在页面进行回发时返回给您。这意味着服务器上的内存使用量减少,视图状态在会话中不易变(或者受到会话等应用程序重置的影响)。然而,这也意味着无论您存储的是什么,都是通过网络发送的,因此您永远不会想要存储信用卡号码,SSN等信息。
这也意味着如果你要存储很多非常大的对象,你将会有一个非常大的响应和回发(可能会减慢周期),所以你必须更加小心你的方式和内容存储。
对于您来说,这是一些不同的选择,您应该进行研究并确定哪种方案最适合您的要求。
答案 1 :(得分:1)
在会话中存储值如下:
Session["mykey"] = value;
从会话中读取值就像:
Object value = Session["mykey"];
会话将在几分钟后超时,然后该值将为null。 为避免这种情况,请考虑使用:
Viewstate["mykey"] = value;
Viewstate的使用方式与会话完全相同,只是该值必须是可序列化的。 视图状态将发送到客户端并再次返回,因此请考虑以这种方式存储的数据量。视图状态存储在“__VIEWSTATE”中,并以base64编码。
答案 2 :(得分:0)
不要使用静态字典。使用会话变量存储有关用户会话的信息。
为了获得更好的信息,您必须向我们提供更多信息:什么记录?用什么格式?等
答案 3 :(得分:0)
当一个变量被声明为static
时,这意味着每个类只有一个该变量的实例(这也包括Web应用程序中的类)。
因此,静态变量不依赖于用户。如果您需要存储特定于用户的数据,请考虑使用Session variable。
答案 4 :(得分:0)
您可以将字典存储在会话中,这样每个用户都可以拥有自己的字典,并且代码无法访问其他用户。
或者,如果您有时希望能够访问其他用户的信息,则可以将其声明为
static Dictionary<String, Dictionary<T, T>>
其中字符串键是唯一的用户ID。