2014-09-15 7 views
0

Hy all!IE가 세션을 활성 상태로 유지하는 이유는 무엇입니까?

C#으로 MVC 4.0 웹 응용 프로그램을 개발 중이며 다음 오류가 발생했습니다. 주요 브라우저 (Chrome, Mozilla Safari 등)에서 웹 응용 프로그램에서 로그 아웃을 클릭하면 올바른 사용자 아이디가 로그 아웃됩니다. IE에서 동일한 작업을 수행 할 때 작동하지 않습니다. 새 사용자로 로그인합니다. IE는 Ctrl + F5를 누를 때까지 마지막 사용자를 유지합니다. 인증에 사용하는 유일한 방법은 세션입니다.

누군가이 문제가 발생 했습니까? 나는 분명 캐시, abadon, 분명, removeall과 아무것도 IE를 할 때 작동하도록 보인다 분명 세션을 시도했습니다.

여러분이 저를 도울 수있는 정보가 더 필요하시면 최대한 빨리 답변 드리겠습니다 !!

+0

IIS 응용 프로그램 서버가있는 로컬 환경에서만이 문제가 발생합니까? – gustavodidomenico

답변

0

I했습니다 다음 작품을 발견하십시오.) 브라우저 캐시하지 않고, 보통

Session.Clear()                 
Session.Abandon()                
Session.RemoveAll()                
If Request.Cookies("ASP.NET_SessionId") IsNot Nothing Then      
    Response.Cookies("ASP.NET_SessionId").Value = ""      
    Response.Cookies("ASP.NET_SessionId").Expires = DateTime.Now.AddMonths(-20) 
End If             
0

가, Ctrl + F5는 의미 "현재 URL에 대한 HTTP 요청을 할 수 있도록 그것을 구현하는 브라우저 그래서, 서버 측 코드에서 사실을 한 후에도 IE가 기본적으로 로컬 메모리에서 현재 페이지를 다시로드하기 때문에 서버를 사용하지 않아도 로그 아웃되지 않습니다. 그런 다음 결국 다시 돌아올 때 귀하의 서버는 귀하를 로그 아웃 한 페이지가 실제로 방문되지 않기 때문에 여전히 동일한 쿠키를 보내고 있습니다.

이것이 일어나고 있는지 테스트하는 한 가지 방법은 로그 아웃 코드에 중단 점을 설정하는 것입니다. IE에서 ctrl을 유지하지 않고 페이지를 새로 고치고 중단 점이 맞았는지 확인합니다. 그렇지 않은 경우 클라이언트 측 캐싱이 원인이라는 것을 알고 있습니다.

해결 방법 :

브라우저를 나타내는 메타 데이터로 페이지를 보내드립니다 서버에서이 코드는 자신의 옆에있는 페이지를 캐시, 어떤 상황에서도 허용되지 않습니다 :

response.Cache.SetAllowResponseInBrowserHistory(false); 
response.Cache.SetCacheability(HttpCacheability.NoCache); 
response.Cache.SetNoStore(); 
response.Cache.SetExpires(DateTime.Now); 
response.Cache.SetValidUntilExpires(true); 

- 또는 -

/logout 또는 /home?logout=1와 같은 로그 아웃 페이지로 이동하면 /logout?cacheBust=123yt74y5t과 같은 추가 매개 변수를 추가하여 마지막 부분을 임의로 만듭니다. 이것은 대부분의 브라우저 캐시가 URL을 기반으로 캐시하므로 URL의 중요하지 않은 부분을 무작위로 엉망으로 만들면 작동 할 수 있습니다. 이 방법의 한 가지 장점은 실제로 브라우저가 일부 페이지를 캐시하지만 다른 페이지는 캐시하지 않기를 바라는 것입니다. 이는 서버에서 새로운 사본을 원하는지 여부를 결정하는 클라이언트 측 방식입니다.

관련 문제