캐시와 브라우저 뒤로 버튼을 처리하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/23094

  •  09-06-2019
  •  | 
  •  

문제

asp.net 앱에 캐시된 항목이 있는 페이지로 돌아가는 사용자를 처리하는 가장 좋은 방법은 무엇입니까?뒤로 버튼(이벤트?)을 캡처하고 그런 방식으로 캐시를 처리하는 좋은 방법이 있나요?

도움이 되었습니까?

해결책

다음을 사용해 볼 수 있습니다. HttpResponse.Cache 속성 그게 도움이 된다면:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(false);
Response.Cache.VaryByParams["Category"] = true;

if (Response.Cache.VaryByParams["Category"])
{
   //...
}

또는 다음을 사용하여 페이지 캐싱을 완전히 차단할 수 있습니다. HttpResponse.CacheControl, 그러나 위의 Cache 속성을 위해 더 이상 사용되지 않습니다.

Response.CacheControl = "No-Cache";

편집하다:아니면 정말 그럴 수도 있지 미치다 모든 작업을 직접 수행합니다.

Response.ClearHeaders();
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 

다른 팁

내가 아는 한(또는 적어도 읽은 적이 있는 한) 사용자 이벤트에 반응하여 작업하지 않고 "페이지 내에서" 생각하는 것이 가장 좋습니다.

뒤로 버튼을 눌러도 상관하지 않도록 애플리케이션을 설계하세요.그냥 처리하면 될텐데..이는 개발 관점에서 볼 때 약간의 추가 작업을 의미할 수 있지만 전반적으로 애플리케이션이 훨씬 더 강력해집니다.

즉, 3단계에서 일부 데이터 변경을 수행한 후 사용자가 다시 2단계를 클릭하고 다음을 다시 클릭하면 애플리케이션에서 변경 사항이 적용되었는지 확인합니다.아니면 이상적으로는 아무 것도 만들지 않습니다. 딱딱한 사용자가 마지막에 "확인"을 클릭할 때까지 변경됩니다.이렇게 하면 모든 변경 사항이 저장되며 매번 로드할 때 이전에 입력한 값을 기반으로 양식을 다시 채울 수 있습니다.

그게 말이 되기를 바랍니다 :)

RFC 2616 §13.13 말한다 히스토리와 캐시는 다른 것입니다..캐시가 뒤로 버튼에 영향을 미칠 수 있는 방법이 전혀 없어야 합니다.

HTTP 헤더 조합이 뒤로 버튼에 영향을 미치는 경우 이는 한 가지 예외를 제외하고는 브라우저의 버그입니다.

HTTP에서에스 브라우저는 해석합니다 Cache-control: must-revalidate 뒤로 버튼을 사용할 때 페이지를 새로 고치라는 요청입니다(Mozilla에서는 이를 "바보 같은 뱅크 모드"라고 부릅니다).일반 HTTP에서는 지원되지 않습니다.

이를 처리하는 가장 좋은 방법은 ASP.NET 페이지(또는 사용 중인 경우 마스터 페이지)에 no-cache 지시문을 넣는 것입니다.캐시 결정은 클라이언트에서 이루어지므로 ASP.NET 코드에서 이 문제를 직접 처리할 수 있는 방법은 없다고 생각합니다.

MVC의 경우 이를 어떻게 수행할지 모르겠습니다(Web Forms 기반 ASP.NET과 다르다고 가정).나는 그것을 사용하지 않았습니다.

다음 코드는 IE9+, FF21 및 최신 Chrome에서 작동했습니다.

Response.Cache.SetCacheability(HttpCacheability.NoCache | HttpCacheability.Private);
Response.Cache.AppendCacheExtension("must-revalidate");
Response.Cache.AppendCacheExtension("max-age=0");
Response.Cache.SetNoStore();

이것을 넣을 수 있습니다 Page_Load() 뒤로 버튼을 누를 때 앱의 모든 페이지가 서버로의 왕복이 필요하도록 MasterPage의 이벤트 핸들러.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top