asp.net - удаление объекта кэша в конце сессии - PullRequest
2 голосов
/ 21 декабря 2009

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

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 16 июня 2011

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

1 голос
/ 21 декабря 2009

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

0 голосов
/ 26 января 2010

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

0 голосов
/ 21 декабря 2009

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

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

...