Current.Session很奇怪

时间:2014-03-05 18:32:51

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

我怀疑HttpContext.Current.Session["someSession"]

在我的网站中,我有一个空网格,用户可以在网格的编辑模式中添加一些行。当用户插入新行时,我将其存储在Session中,所以我有这个类:

public static class DocumentSessionRepository
{
    public static IList<DocumentModel> AllDocuments()
    {
        return (IList<DocumentModel>)HttpContext.Current.Session["Documents"];
    }

    public static void Insert(DocumentModel product)
    {
        AllDocuments().Add(product);
    }

    public static void Delete(Guid? idDocument)
    {
        var target = GetOneDocument(p => p.IDDocument == idDocument);
        AllDocuments().Remove(target);
    }

    public static DocumentModel GetOneDocument(Func<DocumentModel, bool> id)
    {
        var one = AllDocuments().Where(id).FirstOrDefault();
        return one;
    }
}

问题是所有用户都获得了相同的会话,因此如果某个用户在此会话中插入新行,其他用户也可以看到它。

我认为我使用这个静态类来管理这个会话变量。或者我在这里遗漏了一些东西。

任何人都可以帮我这个吗?

编辑:

我设置和使用会话的地方:

 public ActionResult InsertDocument(DocumentModel model)
 {
     //Some Code
     DocumentSessionRepository.Insert(model);
 }

查看我使用此会话绑定网格的位置。

  @(Html.Telerik()
      .Grid<DocumentModel>()
      .BindTo((List<DocumentModel>)DocumentSessionRepository.AllDocuments())

1 个答案:

答案 0 :(得分:2)

假设问题出在IList<DocumentModel>实例中。如果为所有用户共享此实例,则会话是特定于用户的并不重要。看起来所有会话共享同一个实例。检查类实例化,例如,如果类在静态字段中实例化,并且该字段存储在会话中,则所有用户都将共享此实例。

我百分百肯定Current.Session正常工作。