2010-01-27 5 views
18

내 문제는 이전 페이지가 양식에 의해 만들어 졌을 때 "뒤로"버튼이 "페이지 만료"와 같은 말을하게하는 것입니다.

예 :

  • PAGE1 : 링크와 함께 사용자의 $ _POST 요청 및 쇼 결과 (목록을받습니다 : 검색 CRITERIAS ($ _POST 요청 양식 페이지 2에 점)
  • 페이지 2는 제출 양식 , PAGE3에 점)
  • PAGE3 : 표시 사용자 프로필

이제 절 isitor는 브라우저에서 뒤로 버튼을 클릭하면 "페이지 만기"와 같은 내용이 표시됩니다.

대신 이전 페이지합니다 (사용자 목록과 페이지 2) 경고없이

어떻게이 문제를 해결하기 위해 당신의 전략이 함께 표시되어야 하는가?

+2

와우! 방금 새로운 것을 배웠습니다 : 태그 연산자 'not'. xD –

답변

23

당신이 검색 매개 변수에 대한, 당신은 일부 데이터 얻을 하려고하는 제출하는 경우, 일부를 수정할 수 없습니다.

따라서 POST가 아닌 HTTP GET 메서드를 사용해야합니다. 데이터를 만들거나 수정할 때 POST를 사용해야하며 일부 데이터를 가져올 때 GET을 사용해야합니다.

  • 양식 처음 게시하는
    • 해당 페이지가 쓰기 (같은 일부 작업 을하는 첫 번째 페이지로 : 당신이있는 경우


      또는 일부/완료되어야 수정 작업 생성 데이터베이스에 무엇인가)

    • 그런 다음 Location HTTP 헤더를 사용하여 다른 페이지로 리디렉션합니다.
  • URL에 수신 된 매개 변수에서 가져온 데이터를 표시하는 것은 GET 요청을 사용하는 브라우저의 쿼리입니다.

위키 백과의 Post/Redirect/Get 페이지를 참조하십시오.

+0

또한 GET을 사용하면 결과 페이지가 북마크 가능 –

+1

우수 답변입니다. 더 명확하고 요점을 지을 수는 없습니다. 또한 요청한 것 이상을 제공합니다. 대안과 통찰력. 감사. – Cudos

+0

@ Cudos : 환영합니다 :-) 재미있게 보내십시오! –

1

게시 한 스크립트에 Location 헤더를 보내면 뒤따라 오는 페이지를 가리 킵니다.

+0

HTTP 상태 코드 303을 사용하십시오. 현재 문서에 따라 명시 적으로 지정되지 않은 경우 PHP의 기본값은 302입니다. – MattBianco

1

검색을 위해 POST를 사용하지 마십시오. 검색은 아무 것도 변경하지 않으므로 GET으로 안전하게 수행 할 수 있습니다.

1

이것은 PHP와 IE8에 적용됩니다.

캐싱을 비공개로 설정해야 할뿐만 아니라 캐싱 헤더 4 개를 제거해야하며 이는 PHP 5.3에서만 가능합니다. PHP 5.2 Zend Framework의 setHeader() 메소드를 사용하는 경우에만 4 개의 헤더를 공백 값으로 설정할 수 있습니다. 어떤 이유로 IE8에서 4 개의 헤더 값을 빈 값으로 설정하는 것으로 충분하지 않습니다. PHP 5.3의 코드는 다음과 같습니다.

header_remove("Expires"); 
    header_remove("Cache-Control"); 
    header_remove("Pragma"); 
    header_remove("Last-Modified"); 
0

세션을 사용하여이 작업을 수행 할 수 있습니다.

예 :

$ _SESSION [ 'name'] = $ _POST [ 'name'];

메모리 사용을 최적화하기 위해 프로세스가 완료된 후 변수를 설정 해제하십시오.