2

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

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

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

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

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

4

4 回答 4

3

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

于 2011-06-15T20:20:36.383 回答
1

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

于 2009-12-21T16:54:56.187 回答
0

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

于 2010-01-25T21:56:57.447 回答
0

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

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

于 2009-12-21T17:06:26.927 回答