사람들이 비슷한 문제를 가지고 있지만 작동하는 해결책을 찾지 못한 수많은 게시물을 읽었습니다. MVC 4 사이트를 가지고 있으므로 페이지를 캐시하려는 전체 웹 사이트에서 캐싱을 제거하고 싶지 않습니다. 사용자가 로그 오프 버튼을 클릭하면 성공적으로 로그 오프하고 로그인 페이지로 리디렉션됩니다. 그러나 사용자가 뒤로 버튼을 클릭하면 로그인 한 경우에만 볼 수있는 이전에 본 "제한된 페이지"가 표시됩니다. 이는 브라우저가 페이지 클라이언트 측을 캐시했기 때문입니다. 나는 여러 가지 해결책을 시도해 왔으며 앞서 언급 한 것처럼 그들 중 누구도 일하지 않는다. 현재 내 로그 오프 다음과 같은 코드가 있습니다MVC 4 - 로그 아웃 후 뒤로 버튼 문제
public ActionResult LogOff()
{
FormsAuthentication.SignOut();
Session.Abandon();
Session.Clear();
// clear authentication cookie
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie1);
// clear session cookie (not necessary for your current problem but i would recommend you do it anyway)
HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
cookie2.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie2);
// Invalidate the Cache on the Client Side
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetNoStore();
Response.AppendHeader("Pragma", "no-cache");
// send an expired cookie back to the browser
var ticketExpiration = DateTime.Now.AddDays(-7);
var ticket = new FormsAuthenticationTicket(
1,
// replace with username if this is the wrong cookie name
FormsAuthentication.FormsCookieName,
DateTime.Now,
ticketExpiration,
false,
String.Empty);
var cookie = new System.Web.HttpCookie("user")
{
Expires = ticketExpiration,
Value = FormsAuthentication.Encrypt(ticket),
HttpOnly = true
};
Response.Cookies.Add(cookie);
return RedirectToAction("Login", "Account");
}
나는 당신이 당신의 인증을 어떻게하고 있는지 모른다. 그러나 모든 웹 사이트에서 사용자가 사이트에 올 수있는 적절한 인증을 받았는지 확인하기 위해 데이터베이스를 확인하지 않아야합니까? 그리고 그렇지 않다면, 그것은 뭔가를 디스플레이에 리다이렉트해야한다. 페이지가 캐싱 된 경우에도 스크립트는 계속 실행되며 db에 저장된 사용자 세션에 로그 오프 되었음이 표시되어야합니다. – AwDogsGo2Heaven
물론 작동하지 않을 것입니다. 만료 코드는 * 현재 * 요청이 캐시되는지 여부에만 영향을줍니다. 현재 요청은 로그 오프 코드이므로 로그 오프 페이지 만 캐시되지 않습니다. 캐싱 된 페이지는 소급하여 다시 제거 할 수 없습니다. –