2009-12-21 3 views
2

현재 로그인 한 사용자 (일부 세션 정보)를 저장하는 Caching (CachingBL)에 대한 래퍼 클래스가 있습니다. 나는이 같은 캐시에 액세스 할 필요가asp.net - 세션 끝에서 캐시 객체 삭제

세션의 끝에서 :

는 CachingBL 래퍼에서 실제로 사용자의 사전이있다, 나는 다음과 같이 캐시에 그 사전을 걸었습니다 : HttpContext.Current.Cache.Insert(...)

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

그러나 문제는 HttpContext.Current이 비어있어 Cache 개체에 액세스 할 수 없다는 것입니다. 캐시 자체는 비어 있지 않지만 (테 스트), Session_End에서 액세스하는 방법을 알아낼 수 없습니다.

답변

1

전체 사전을 하나의 캐시 항목으로 캐시에 저장하는 대신 캐시의 각 요소를 항목으로 두십시오. 그런 다음 각 요소에 세션 시간 초과 시간의 슬라이딩 시간 창을 제공하고 시스템이 만료를 처리하도록 할 수 있습니다.

+1

그러나 세션과 캐시 항목이 다른 시간에 만료 될 수 있습니다. 정확하게 동일한 매핑이 필요합니다. 세션에있는 모든 사용자는 캐시 항목이 있어야합니다. 세션이 만료되는 시점에 사용자를 캐시에서 제거해야합니다. –

0

Session_OnEnd 이벤트 내부에는 현재 요청이 없으므로 HttpContext.Current에 액세스 할 수 없습니다.

하지만 모든 세션 변수가 포함 된 세션 상태에 액세스 할 수 있습니다. 따라서 토큰을 세션 캐시 슬롯의 키 이름 (예 : "MyCache_CacheSlot")에 저장하는 세션 변수가 있으면 Session_OnEnd 이벤트에서 해당 캐시를 해제 할 수 있습니다.

0

System.Web.SessionState.HttpSessionState 당신은 정적 캐시에 액세스 할 수 System.Web.HttpRuntime.Cache을 사용할 수 있습니다 내가 대신 HttpContext.Current

+0

HttpSessionState는 세션에 대한 액세스를 제공합니다. 캐시가 아니기 때문에 실제로 자신의 질문에 답변하지 않았습니다. –

3

의 사용해야 하나입니다.