Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net web应用程序中的静态类以及它如何作为会话或应用程序变量工作?_C#_Asp.net_.net_Asp.net Mvc 4 - Fatal编程技术网

C# asp.net web应用程序中的静态类以及它如何作为会话或应用程序变量工作?

C# asp.net web应用程序中的静态类以及它如何作为会话或应用程序变量工作?,c#,asp.net,.net,asp.net-mvc-4,C#,Asp.net,.net,Asp.net Mvc 4,如果我将用户信息存储在静态类中,则 登录后由其他用户覆盖。静态类如何行动 在asp.Net的web应用程序中?添加到类中静态字段的值是为该类的所有实例定义的 如果将用户信息存储在静态字段中,则该信息将由正在运行的web进程中的类的所有实例共享。每个请求都将读取/写入此静态字段的值。您不应该这样做,因为这将导致不正确的数据 在web应用程序中,您将有许多同时发生的多个请求,因此出于这个原因,您需要使用asp.net会话对象 运行时会保证存储在会话对象中的信息对于每个用户会话都是唯一的。静态类在AS

如果我将用户信息存储在静态类中,则 登录后由其他用户覆盖。静态类如何行动
在asp.Net的web应用程序中?

添加到类中静态字段的值是为该类的所有实例定义的

如果将用户信息存储在静态字段中,则该信息将由正在运行的web进程中的类的所有实例共享。每个请求都将读取/写入此静态字段的值。您不应该这样做,因为这将导致不正确的数据

在web应用程序中,您将有许多同时发生的多个请求,因此出于这个原因,您需要使用asp.net会话对象


运行时会保证存储在会话对象中的信息对于每个用户会话都是唯一的。

静态类在ASP.NET中的行为方式与在任何其他环境中的行为方式相同:.NET应用程序在名为
AppDomain
的沙盒中运行,并且在
AppDomain
中可以使用静态值

换句话说:静态值不是线程范围的,这意味着它是一个应用程序域范围的问题。也就是说,来自任何线程的任何用户都可以修改静态值


该规则有一个例外:
[ThreadStatic]
属性,该属性可应用于静态类字段,其值仅在创建这些字段的线程中可用,如果线程结束,则所谓的值将丢失无论如何,不要在ASP.NET中使用
[ThreadStatic]
,因为Web服务器(如IIS/OWIN)可能会使用多个线程处理请求。

@Micky我可以更改它…@Micky没问题;这并不令人不快,但如果您不知道静态对象是如何工作的,请停止您的代码,花几分钟的时间来理解这些基本知识。我基本上知道什么是静态类。在阿尔卡特朗讯客户端的一个项目中,所有的用户信息在登录后都存储在静态类中。但它仍然为用户提供独特的信息。正如一些人在这里所说,它应该被新的用户信息覆盖。有可能在静态类中保留用户明智的信息吗?没有办法在静态简单字段中保留用户信息,而是像Mathias说的那样使用[ThredStatic],但他不鼓励使用^^。您有一个非常糟糕的解决方案,它使用静态集合存储用户信息,并使用唯一的密钥让您找到正确的用户。但不建议采用这种解决方案,因此应用程序变量的作用方式也与asp.net中的静态类相同。我说得对吗?