>백엔드 개발 >PHP 튜토리얼 >Thinkpad s230u Twist 양식의 반복 제출을 방지하는 ThinkPHP 방법

Thinkpad s230u Twist 양식의 반복 제출을 방지하는 ThinkPHP 방법

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-07-29 08:46:291422검색

그러나 예방할 수 없는 상황이 하나 있습니다.

사용자가 양식을 제출한 후 브라우저의 뒤로 버튼을 클릭하면 양식 페이지로 돌아갑니다. 이때 브라우저는 캐시에서 페이지를 직접 검색하므로 토큰 확인이 실패해야 합니다.

현재 기록 레코드를 교체하기 위해 location.replace() 메서드를 사용하는 등 인터넷에서 이 문제를 우회하는 방법은 여러 가지가 있지만 여기에는 여전히 결함이 있습니다. 극단적인 경우 사용자가 페이지 간에 여러 번 전환하는 경우 뒤로 버튼을 여러 번 클릭하면 이전 양식 페이지로 돌아갈 수 있습니다.

해결책은 http 헤더에 Cache-Control: no-cache, no-store를 설정하는 것입니다. 그런데 페이지 헤드에  ThinkPHP 防止表单重复提交的方法

을 추가해 보았는데, 오랜 시간 검색을 해보니 문제가 있는 것으로 나타났습니다. 렌더링 메커니즘에 대해서는 ThinkPHP/Lib/Think/Core/View.class.php를 열고 173행을 살펴보세요

header("Cache-control: private");  //支持页面回跳

원본 페이지 바운스를 지원하기 위해 TP는 각 템플릿이 출력되기 전에 Cache-control: private 헤더를 강제로 전송하는데 이는 실제로 해를 끼치는 일입니다.

이 줄을 주석 처리하고 TP 코어 캐시를 삭제한 후 다시 시도하여 HTTP 응답 헤더가 성공적으로 변경되었는지 확인하세요.

 ThinkPHP 防止表单重复提交的方法

위 내용은 씽크패드 s230u 트위스트의 내용을 포함하여 양식의 반복 제출을 방지하기 위한 ThinkPHP 방법을 소개한 내용입니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.