asp.net - 在会话结束时删除缓存对象

时间:2009-12-21 16:40:37

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

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

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

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

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

但问题是HttpContext.Current为空,因此我无法访问Cache对象。缓存本身不为空(已测试),但我无法弄清楚如何在Session_End访问它。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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