我有一个用于缓存的包装类(CachingBL),我存储当前登录的用户(他们的一些会话信息)。
在CachingBL包装器中实际上有一个用户字典,我将这个字典放在缓存中,如下所示:HttpContext.Current.Cache.Insert(...)
:
在会话结束时,我需要像这样访问缓存:
var cacheBL = (CacheBL)HttpContext.Current.Cache.Get("MyCache_CacheSlot");
但问题是HttpContext.Current
为空,因此我无法访问Cache
对象。缓存本身不为空(已测试),但我无法弄清楚如何在Session_End
访问它。
答案 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