如果我将用户信息存储在静态类中,它将是 一旦他们登录,由另一个用户覆盖。静态类如何行动 在asp.Net中的Web应用程序中?
答案 0 :(得分:2)
静态类在ASP.NET中的行为方式与在任何其他环境中的行为相同:.NET应用程序在名为AppDomain
的沙箱中运行,静态值可用于AppDomain
。
换句话说:静态值不是线程范围的,这意味着它是应用程序域范围内的问题。也就是说,来自任何线程的任何用户都可以修改静态值。
规则有一个例外:[ThreadStatic]
属性,可以应用于静态类字段,其值只能在创建它们的线程中使用,如果线程结束,那么 - 被叫价值丢失了。 无论如何,不要在ASP.NET中使用[ThreadStatic]
,因为Web服务器(如IIS / OWIN)可能使用多个线程处理请求。
答案 1 :(得分:0)
您为类中的静态字段添加的值是为该类的所有实例定义的。
如果将用户信息存储在静态字段中,则在运行的Web进程中,该类的所有实例将共享该信息。每个请求都将读取/写入此静态字段的值。你不应该这样做,因为它会导致不正确的数据。
在Web应用程序中,您将同时发生大量多个请求,因此您需要使用asp .net会话对象。
保存在会话对象中的信息对于运行时的每个用户会话都是唯一的。