2012-02-28 2 views
1

클라이언트에 캐시해야하는 작은 데이터 개체가 있습니다. 이름과 역할과 같은 사용자 정보입니다. 나는 HttpCacheability.Private 세트가 있습니다. 피들러를 사용하여 페이지를 볼 때 캐싱은 비공개이지만 다른 사용자가 사이트로 이동할 때 각 사용자에 대한 캐시를 저장하는 대신 처음 로그인 한 사용자의 캐시 된 값을 표시하는 것을 볼 수 있습니다. 서버 값을 저장하는 것 같습니다.HttpCacheability.Private 예상대로 작동하지 않습니다.

예를 들어 캐시의 유효 기간은 10 분입니다. 캐시가 만료 된 후 사이트로 이동합니다. 캐시는 null이므로 현재 사용자로 로그인 한 db에서 내 사용자 정보를 조회하여 캐시에 씁니다. 이제 John Doe는 내가 촬영 한 후 3 분 후에 사이트로 이동합니다. 대신 자신의 정보가 표시됩니다.

서버가 아닌 클라이언트에서 각 사용자의 정보를 캐시하려면 어떻게해야하는지 잘 모르겠습니다. 어떤 도움이라도 감사 할 것입니다.

감사합니다,

론다

public static void AddUserToCache(User userToCache, string Key) 
    { 
     HttpContext context = HttpContext.Current; 
     HttpCachePolicy cachePolicy = context.Response.Cache; 
     cachePolicy.SetCacheability(HttpCacheability.Private); 

     if (context.Cache[Key] == null) 
     { 
      context.Cache.Add(Key, userToCache, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(UIConstants.CACHETIMEOUTHOURS, 0, 0), System.Web.Caching.CacheItemPriority.Default, null); 
     } 
    } 




if (Cache["User"] == null) 
     { 
      user = BusinessUtility.GetCurrentUser(); 
      if (user != null) 
      { 
       CacheUtility.AddUserToCache(user, "User"); 

      } 

     } 
     else 
     { 
      user = (User)Cache["User"]; 
     } 
+0

나는 또한 내 코드의 원래 버전에서 Private이 기본값이어야하므로 cachepolicy 항목이 없다는 것을 언급해야합니다. 어느 쪽이든 작동하지 않습니다. – Rhonda

답변

0

context.Cache는 서버 측 캐시이며, 그 어디에 해당 데이터의 삶입니다. 그것을 바꿀 방법이 없습니다. 거기에 저장된 데이터는 서버 측 코드를 통해서만 액세스 할 수 있습니다.

반면에 context.Response.Cache은 브라우저와 중간 프록시에 서버에서 브라우저로 응답을 캐시할지 여부를 알려주는 http 헤더로 전달되는 지시어입니다.

다음 단계는 데이터를 캐싱하여 수행하려는 작업에 대해 조금 더 알아 보는 것입니다. 웹 서버의 히트를 줄이거 나 웹 서버의 히트 수를 줄이려고하십니까?

DB 히트를 줄이려면 context.Cache 코드로 고정하십시오. 키가 저장/검색중인 사용자에 대한 고유 식별자를 갖도록 변경하십시오. cachePolicy.SetCacheability을 제거하면 사물을 혼동하지 않습니다.

웹 서버의 히트 수를 줄이려면 cachePolicy.SetCacheability 코드를 붙이고 context.Cache 코드를 제거하십시오.

+0

데이터베이스에 대한 적중을 줄이려고합니다. 고유 한 ID를 키에 추가하고 서버에서 테스트합니다. 응답 해 주셔서 감사합니다. – Rhonda

관련 문제