2011-01-21 7 views
1

저는 웹 응용 프로그램에서 고전 ASP를 개발하고 있습니다. 그것은 기본적으로 다음과 같은 작업클래식 ASP 로그 아웃 프로세스

  1. Session.Abandon()을 사용자가 다시 로그인 할 수 있습니다 Index.asp에
  2. 리디렉션을 수행하는 상단 메뉴 버튼을 로그 아웃했다.

사용자를 로그 오프 한 후 index.asp로 돌아갑니다. 그러나 사용자가 브라우저를 다시 클릭하면 이전 페이지로 이동합니다. 나는 이것을 원하지 않는다. 이미 로그 오프되었다는 메시지가 나타납니다. 다음 단계를 구현했습니다.

1. 각 페이지 상단에 Response.Expires=-1Response.CacheControl="no-cache"을 추가하십시오. 2. 각 페이지에서 세션 객체가 비어 있지 않은지 확인하고 있습니다. 비어 있다면 나는 이미 로그 오프되었고 다시 로그인해야한다는 메시지를 작성합니다.

사용자가 로그 오프 한 후 뒤로 버튼을 클릭하면 로그 아웃 된 메시지가 표시되지 않고 IE8에서 "웹 페이지가 만료되었습니다"라는 메시지가 나타납니다. 로그인하는 동안 사용자가 일부 페이지에서 뒤로 버튼을 클릭 할 때 동일한 동작을 볼 수 있습니다.

어떻게하면 더 잘 구현할 수 있는지 생각해보십시오.

감사합니다.

+0

"웹 페이지가 만료되었습니다"와 유사한 메시지는 사용자가 POST 결과 인 페이지로 돌아 갔음을 나타내며 브라우저는 페이지 상태가 이미 변경되었거나 원래 요청을 다시 게시하면 문제가 발생할 수 있다고 가정합니다. 웹 응용 프로그램에서. –

답변

1

사용자가 다시 누르면 중지 할 수 없습니다. 이 문제를 해결하기위한 일반적인 시나리오는 출력을 표시하지 않고 대신 결과를 볼 수있는 새 위치로 리디렉션하는 서버 페이지를 대상으로합니다.

1

때로는 도움이 추가 비 캐싱 선언이 있습니다

Response.Expires = 0 
Response.AddHeader "pragma","no-cache" 
Response.AddHeader "cache-control","private" 
Response.CacheControl = "no-cache" 

내가 그것을 무시하는 일부 브라우저의 원인이 아니라 할 수있는 몇 가지 전에 시각을 설정하는 것은 -1 만료 (링크를 찾을 수 따라서 무능력)를 읽었다는 즉시 만료 시키십시오.

이러한 추가 캐시 컨트롤을 추가해도 일부 브라우저는 일부 기능을 일부 캐시하지 않습니다. FF는 사용자가 강제로 캐시를 새로 고치는 것을 자주 무시하므로 브라우저를 사용하면 어느 정도 손을 뻗칠 수 있습니다.

"웹 페이지가 만료되었습니다"라는 메시지는 브라우저가 POST 데이터를 다시 전송하지 못하게하고 (마지막으로 수행 한 것과 중복 될 수 있음) 결과입니다. 이 문제를 해결하고 양식에서 다른 일반적인 UI 문제를 해결하는 가장 좋은 방법은 동일한 페이지로 POST하고, 작업이 완료되면 response.redirect를 사용하여 동일한 페이지에, 어쩌면 URL로 인코딩 된 메시지로 "모두 완료되었습니다"라고 말합니다. 이렇게하면 대부분의 브라우저가 리디렉션 된 페이지를 자신의 기록에 올바르게 저장하지 않으므로 사용자가 새로 고침하고 뒤로 버튼 문제를 해결할 수 있습니다.