我一直在使用以下代码进行一些测试,以尝试和锻炼ActionFilterAttributes的工作方式:
public class TestAttribute : ActionFilterAttribute
{
private string _privateValue;
public string PublicValue { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
_privateValue = DateTime.Now.ToString();
base.OnActionExecuting(filterContext);
}
}
Run Code Online (Sandbox Code Playgroud)
当我在两个并行线程上运行上面的代码时,_privateValue字段会混淆.但是,PublicValue属性不会混淆.
在我看来,ActionFilterAttributes可以跨线程重用,但是根据为公共属性指定的常量创建新实例.我对么?
我在哪里可以找到相关信息?
我们在会话中存储两个对象.不知何故,来自另一个用户的一个对象被加载到另一个用户的会话中.用户应该无法访问这些特定数据,一旦他们看到它就知道出现了一些非常错误的信息.
我们对他提供的数据有视觉证据,除非会议混淆,否则肯定没有办法发生.这是一个非常可怕的情况,我们无法弄清楚(我们无法重现它).我们唯一的答案是责怪ASP.NET StateServer混合会话变量,这是完全不可接受的,并使我们处于不利地位.
我们的应用程序是使用StateServer cookieless="false"会话模式和FormsAuthentication 在带有IIS6的Windows Server 2003上运行的ASP.NET 2.0应用程序.
还有其他人有这个问题吗?我们怎么解决呢?