如何基于登录用户在sharepoint 2010中进行缓存

时间:2013-07-01 06:46:49

标签: caching sharepoint-2010

我需要根据登录用户在缓存中存储动态创建的xmldatasource菜单。以下代码为所有用户返回相同的数据,因为我没有提到登录用户。在添加缓存时我需要在哪里提及登录名?我也希望在从事件接收器添加新站点时重置或删除缓存,因为站点地图必须重新创建。

    private static object _lock = new object();

    public XmlDocument CacheData()
    {            
        XmlDocument item;
        lock (_lock)
        {
            item = (XmlDocument)Cache["SiteMapCache"];
            if (item == null)
            {
                using (SPSite site = new SPSite(SPContext.Current.Site.Url))
                {
                    SPWebApplication webapp = site.WebApplication;
                    item = GenerateMenu(webapp);
                }
                Cache.Add("SiteMapCache",
                    item, null,
                    DateTime.Now.AddMinutes(1),
                    System.Web.Caching.Cache.NoSlidingExpiration,
                    System.Web.Caching.CacheItemPriority.Default,
                    null);
            }
            return item;
        }
    }

1 个答案:

答案 0 :(得分:0)

一个不知道为什么你会这样做。就像您构建了一个Sharepoint OOTB发布站点一样,会出现用户有权访问的其他子站点。如果您沿着缓存的根目录进行缓存,则最终可能会在缓存中出现大量条目,因为每个条目都需要不同。

否则将USERName添加到CacheKey名称。

然后更改您的代码,以便它首先检查“SiteMapCache”+ Spcontext.Current.Web.CurrentUser.name是否为null,如果它是获取它并将其存储为缓存。

您需要另一个缓存项,以存储已添加到缓存中的用户列表。

然后,如果创建了新站点,则遍历每个站点并将缓存项设置为null。