我发现文章描述了与我的问题相似但不够接近的问题。我有一个非常间歇性的问题,一个用户可以登陆另一个用户会话并最终看到他们存储在会话中的一些信息。这是我的场景:我们在负载平衡环境中使用 AbleCommerce,使用 Application Request Routing 和 Web Farm Framework。我们使用进程内会话,但我们配置了粘性会话(客户端/服务器关联)并且可以正常工作。我已经验证没有缓存导致这个问题(没有使用页面输出缓存,没有 ARR 缓存,没有 IIS 或 WAAS 缓存)。会话中存储的信息偶尔会出现在其他人的浏览器上,这些信息通过基于会话的单例对象存储在会话中。
例如:
public class ExampleObject
{
public string ExampleData{get; set;}
public static TicketingSession Instance
{
get
{
if (HttpContext.Current.Session["ExampleObject"] == null)
{
HttpContext.Current.Session["ExampleObject"] = new ExampleObject();
}
return (ExampleObject)HttpContext.Current.Session["ExampleObject"];
}
}
}
然后在其他一些代码中我可以使用它:
ExampleObject.Instance.ExampleData = "whatever";
//or
txtSomeTextBox.Text = ExampleObject.Instance.ExampleData;
我知道我应该避开负载平衡环境中的静态数据和进程内会话,但由于我使用的是客户端/服务器关联,而且我使用的这个静态对象只是一个属性,它的 getter 只是直接从会话状态我没有看到问题。