用户对不对会议(User on wrong session)

2019-10-16 23:06发布

我发现,描述与我相似的问题,但不够紧密的文章。 我有一个真正的间歇性问题,其中一个用户可以登陆另一个用户会话,并最终看到了一些中所储存的会话他们的信息。 这里是我的情况:我们在利用应用程序请求路由和Web场框架的负载均衡的环境中使用AbleCommerce。 我们使用的进程内的会议,但我们已经配置和工作粘性会话(客户端/服务器关系)。 我已经验证没有缓存(使用页面输出缓存,无缓存ARR,没有IIS或WAAS缓存无关)导致此问题。 存储在很偶然的在别人的浏览器结束会话的信息通过基于会话的单例对象保存在session。

例如:

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;

我知道我应该在负载均衡的环境中避开静态数据和进程内的会议,但由于我使用的客户机/服务器的亲和力和因为我使用这个静态的对象只是一个属性卫生组织吸气剂简单地直接从返回对象会话状态我没有看到一个问题。

Answer 1:

您需要在Web农耕场景时从INPROC会议移开。 您需要使用进程外会话存储,保证了Session ID是唯一的。

ASP.NET存储其Session ID的浏览器的cookie收藏。 如果用户具有相同的Session ID的会话将出现在同一个服务器。 在同一服务器上使用单独的服务器,或甚至工作进程,可导致这些类型的Session ID的冲突。

您可以通过获得更多的细节MSDN上的ASP.NET支持的各种会话状态模式 。



文章来源: User on wrong session