redis - 防止表单重复提交是怎么做的?
PHP中文网
PHP中文网 2017-04-24 09:10:06
0
2
1307

关于防止表单重复提交的做法有很多,本人知道的有如下,只是简单讲讲,大家觉得什么办法最简单又有效?

1.有redis的环境
把提交的动作action,参数之类的作为redis的key,存进redis,设置一个很短的缓存时间,提交的时候判断如果存在这个key,说明是重复提交数据。

2.jquery前端判断
除了在程序端判断重复提交外,在页面前端也加一层措施,如点击提交按钮,按钮状态不可用(有的按钮用的a标签),如果不是按钮button,可以用jquery在提交的时候设置一个属性值,如果有了这个属性值,表示已经提交。

$("body").data("applycancel","unlock");

3.表单隐藏域token

生成一个随机数,放进session,给表单加一个隐藏域放进token,提交的时候判断表单的token隐藏域和session的值是否一致,如果不一致表示重复提交,处理表单的时候unset掉这个session。

各位还有什么办法,什么办法最好,谢谢!

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답(2)
小葫芦

Etag를 사용하여 동시성 제어에서 낙관적 잠금 메커니즘을 구현합니다. 다음 예는 반복 제출에 국한되지 않습니다.

동시 시나리오에서 여러 클라이언트가 동시에 동일한 리소스를 운영하는 경우 상황이 발생합니다. 클라이언트가 운영하는 리소스가 알 수 없는 상황에서 변경됩니다.

간단한 예:

A라는 사용자가 post-a라는 내용으로 게시물을 올렸습니다. B라는 사용자가 post-a을 보고 아래에 댓글을 달았는데, A라는 사용자가 해당 게시물의 내용을 post-aa으로 변경했습니다. 발생할 수 있는 문제 중 하나는 사용자 B가 post-a에 쓴 댓글이 이상해 보인다는 것입니다^_^

해결 방법은 매우 간단합니다. B가 A를 보면 게시물 리소스 식별 태그-1을 제공합니다. B가 댓글을 제출하면 이 식별 태그-1과 함께 제출됩니다. 서버는 요청을 수락하기 전에 사전 조건을 확인합니다. 당시 게시물 내용에 변경 사항이 없으면 여전히 태그-1이며 이는 성공을 의미합니다.

게시물의 내용이 변경되면 새 ID는 tag-2로 B가 제출한 tag-1과 일치하지 않아 해당 기간 동안 리소스가 변경되었음을 나타내며 412 Precondition Failed가 반환됩니다. 그런 다음 페이지나 프롬프트를 새로 고치고 B에게 이 변경 사항을 알리고 계속 댓글을 남깁니다.

API 상황도 비슷합니다. 반환된 리소스에 식별자만 추가하면 됩니다.

伊谢尔伦

전달된 매개변수에서 해시 값을 생성하고 이를 데이터베이스의 hash_code 필드에 저장합니다. 이 필드는 고유 인덱스로 사용됩니다. 그리고 데이터베이스에 삽입될 때마다 동일한 방식으로 해시값이 생성되어 해당 해시값이 존재하는지 확인합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿