2009-12-21 3 views
2

У меня есть класс-оболочка для кэширования (CachingBL), где я храню пользователей, которые в настоящее время подписываются (некоторые из их сведений о сеансе).asp.net - удаление объекта кеша на конец сеанса

В CachingBL обертке есть на самом деле словарь пользователей, и я ставлю этот словарь в кэш, как это: HttpContext.Current.Cache.Insert(...):

В конце сеанса я должен был бы получить доступ к кэшу, как это:

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

Но проблема в том, что HttpContext.Current пуст, поэтому я не могу получить доступ к объекту Cache. Сам Cache не пуст (проверен), но я не могу понять, как получить к нему доступ по адресу Session_End.

ответ

1

Вместо того чтобы помещать весь словарь в кеш как одну запись в кэш, поместите каждый элемент в кеш в качестве записи. Затем вы можете дать каждому элементу скользящее временное окно времени таймаута сеанса и позволить истечению срока действия системы.

+1

Но запись сеанса и кэша может истекать в разное время. Мне нужно точно такое же сопоставление - все пользователи, которые в сеансе, должны иметь запись в кэш. В момент окончания сеанса пользователь должен быть удален из кеша. –

0

Внутри события Session_OnEnd нет способа получить доступ к HttpContext.Current, поскольку текущий запрос отсутствует.

Но у вас есть доступ к состоянию сеанса, который включает в себя все переменные сеанса. Поэтому, если у вас есть переменная сеанса для хранения вашего токена с именем ключа слота кеша сеанса («MyCache_CacheSlot» в вашем примере), вы сможете освободить этот кеш внутри события Session_OnEnd.

0

System.Web.SessionState.HttpSessionState это один я должен использовать вместо HttpContext.Current

+0

HttpSessionState предоставляет доступ к сеансу. Не кэш, так что вы на самом деле не ответили на свой вопрос. –

3

Вы можете использовать System.Web.HttpRuntime.Cache для доступа к кэшу статический.

Смежные вопросы