2009-12-23 4 views
1

MVC 애플리케이션이있어서 로그 아웃해야합니다. 내가 로그 아웃을 클릭하면 내가 테 마스터 페이지MVC에서 로그 아웃

[ <a id="A2" name="lnkLogout" href="http://localhost:1234/Home/LogOut" >Logout</a> ] 

에 링크를 생성 한 응용 프로그램에서 로그 아웃

public ActionResult LogOut() 
     { 
      Session.Clear(); 
      Session.Abandon(); 
      Redirect("http://AnotherApplicaton/Home/LogOut"); 
     } 

이제 컨트롤러 페이지에서 LoutOut 작업을 생성하려면 로그 아웃의 리디렉션을 연결 액션과 LogOut 액션에서 모든 세션을 삭제하지만 브라우저의 뒤로 버튼을 클릭하면 이전 페이지로 돌아가고 세션은 여전히 ​​살아 있습니다. 누구든지이 문제의 해결책을 가지고 있습니까?

답변

2

세션은 이 아니며이 살아 있습니다. 그들은 그냥 캐시됩니다.

페이지를 강제로 새로 고침 (ctrl + f5)하고이를 확인해 볼 수 있습니다.

6

브라우저에서 방문하는 페이지는 브라우저의 캐싱 설정에 따라 캐싱됩니다. ASP.net MVC에서 캐싱을 방지하여 브라우저에서 캐시하지 않도록해야합니다. 그런 다음 브라우저 캐시를 지우고 페이지를 다시로드 해보십시오. 로그 아웃하고 뒤로 버튼을 사용해보십시오. 페이지가 더 이상 존재하지 않는다는 메시지가 나타납니다.

ASP.net 페이지가 브라우저에 캐시되지 못하도록하는 여러 가지 방법이 있습니다. 페이지를 렌더링하기 전에 이렇게하는 것이 하나의 방법입니다.

this.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)) 
this.Response.Cache.SetCacheability(HttpCacheability.NoCache) 
this.Response.Cache.SetNoStore() 
+0

정말 좋은 생각입니까? 각보기에서이 값을 명시 적으로 설정해야합니까? 이것이 MVC 응용 프로그램의 기본 설정이 아닌 이유는 무엇입니까? ..... 이것은 합리적인 제안처럼 들리지만 몇 가지 이유로 드문 경우를 제외하고는 이상하게 보입니다. 어떤 제안/코멘트? – VoodooChild

16

당신은 폼 인증을 사용하는 경우는 다음이 안녕하세요 솔루션을 가지고 당신이 ...

public ActionResult LogOut() 
     { 
      Session.Clear(); 
      FormsAuthentication.SignOut(); 
      Redirect("http://AnotherApplicaton/Home/LogOut"); 
     } 

HTH

1

찾고있는 것입니다. 사실 저는 토큰을 사용하여 모듈에 로그인했으며 토큰 타임 아웃은 5 초입니다. 로그 아웃 한 후 5 초가되기 전에 브라우저의 뒤로 버튼을 클릭하면 glowal.ascx.cs의 Session_Start() 이벤트가 다시 호출되고 토큰을 다시 읽고 세션을 다시 만듭니다. 그리고 5 초 후에 뒤로 버튼을 클릭하면 세션이 생성되지 않습니다. 이 문제를 해결하기 위해 사용자가 브라우저를 통해 돌아갈 수 없습니다. 이를 위해 다음 코드를 사용했습니다.

<script type="text/javascript"> 
history.go(1); 
</script>