【问题标题】:asp.net - deleting cache object at session endasp.net - 在会话结束时删除缓存对象
【发布时间】:2009-12-21 16:40:36
【问题描述】:

我有一个用于缓存 (CachingBL) 的包装类,我在其中存储当前登录的用户(他们的一些会话信息)。

在 CachingBL 包装器中实际上有一个用户字典,我将该字典放入缓存中,如下所示:HttpContext.Current.Cache.Insert(...):

在会话结束时,我需要像这样访问缓存:

var cacheBL = (CacheBL)HttpContext.Current.Cache.Get("MyCache_CacheSlot");

但问题是HttpContext.Current 是空的,所以我无法访问Cache 对象。缓存本身不是空的(经过测试),但我不知道如何在Session_End 访问它。

【问题讨论】:

    标签: asp.net caching asp.net-caching


    【解决方案1】:

    您可以使用 System.Web.HttpRuntime.Cache 静态访问缓存。

    【讨论】:

      【解决方案2】:

      不是将整个字典作为一个缓存条目放入缓存中,而是将每个元素作为一个条目放入缓存中。然后可以给每个元素一个会话超时时间的滑动时间窗口,让系统处理过期。

      【讨论】:

      • 但是会话和缓存条目可能在不同的时间过期。我需要完全相同的映射——会话中的所有用户都需要有缓存条目。在会话到期的那一刻,用户需要从缓存中删除。
      【解决方案3】:

      在 Session_OnEnd 事件中无法访问 HttpContext.Current,因为没有当前请求。

      但是您确实可以访问包含所有会话变量的会话状态。因此,如果您使用会话变量将令牌存储到会话缓存槽的键名(在您的示例中为“MyCache_CacheSlot”),您将能够在 Session_OnEnd 事件中释放该缓存。

      【讨论】:

        【解决方案4】:

        System.Web.SessionState.HttpSessionState 是我应该使用的,而不是 HttpContext.Current

        【讨论】:

        • HttpSessionState 提供对会话的访问。不是缓存所以你还没有真正回答你自己的问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-22
        • 2020-06-03
        • 2016-06-02
        • 1970-01-01
        • 2012-12-22
        相关资源
        最近更新 更多