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

时间:2015-12-10 10:08:14

标签: c# asp.net .net asp.net-mvc-4

如果我将用户信息存储在静态类中,它将是 一旦他们登录,由另一个用户覆盖。静态类如何行动 在asp.Net中的Web应用程序中?

2 个答案:

答案 0 :(得分:2)

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

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

规则有一个例外:[ThreadStatic]属性,可以应用于静态类字段,其值只能在创建它们的线程中使用,如果线程结束,那么 - 被叫价值丢失了。 无论如何,不​​要在ASP.NET中使用[ThreadStatic],因为Web服务器(如IIS / OWIN)可能使用多个线程处理请求。

答案 1 :(得分:0)

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

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

在Web应用程序中,您将同时发生大量多个请求,因此您需要使用asp .net会话对象。

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