ホームページ >バックエンド開発 >PHPチュートリアル >PHP はセッションと Cookie を使用して、繰り返しの送信を防止します。
繰り返しの送信を防ぐことは、Web 開発において実際的であり、フィルタリングのために同じデータを送信したかどうかを確認するためにデータベースに直接クエリすることに加えて、ユーザーがデータを送信するときにそのようなことを防ぐこともできることがわかりました。重複送信を防ぐために、セッションと Cookie に基づいたいくつかの実装方法を導入します。
更新または再送信を防止します
そこで、このような状況が起こらないようにパラメータを追加することを検討しました。COOKIE と SESSION は利用可能ですが、誰かが COOKIE を無効にしても、悪意を持ってクリック数を更新する可能性があります。 SESSION を使用することをお勧めします。IP+URL パラメータの MD5 値が SESSION 名として使用されます
セッション開始();
$k = $_GET['k']
/* 改良版 コードは次のとおりです
if($_POST['発信者'] ==
}その他{
実装原理 Set max_reloadtime =100 //最大ページ更新間隔を設定します
;
ユーザーが初めてページを開いたときに、現在の時間が記録され、session_start に保存されます
ユーザーが 2 回目にページを開いたとき (session_start が存在するかどうかを判断するため)、session_start から現在時刻を減算して、差分 time_passed を取得します
time_passed
コードは次のとおりです
コードをコピー
$t = $_GET['t'];
//アンチリフレッシュタイム
$allowTime = 1800;
$ip = get_client_ip();
$allowT = md5($ip . $k . $t);
If (!isset($_SESSION[$allowT])) {
$refresh = true;
$_SESSION[$allowT] = 時間();
elseif (time() - $_SESSION[$allowT] > $allowTime) {
$refresh = true;
$_SESSION[$allowT] = 時間();
} その他 {
$refresh = false;
}
?>
フォームの繰り返し送信を防止します
コードは次のとおりです
コードをコピー
PHP では、ユーザーがページを更新 (更新または再読み込み) したり、フォームのコンテンツを繰り返し送信したりすることができなくなります。
フォーム変数の内容は $_POST['name'] によって参照されるため、おそらくフォームを処理した後、$_POST['name'] を直接破棄することができます (unset())。実際には違います。ページがデフォルトでフォームのコンテンツをキャッシュしている可能性があります。そのため、$_POST['name'] が破棄された場合でも、$_POST['name'] には更新後に値が割り当てられ、依然として有効です。
セッションを使用して解決できます。まず、セッションに 400 などの値を割り当てます。最初の送信が成功した後、2 回目の送信時にセッションの値を変更します。セッションの値が 400 でない場合は、セッション内のデータを確認します。フォームは処理されなくなります。
セッションの有効期限は設定できますか?
*/
If (isset($_POST['action']) && $_POST['action'] == '送信済み') {
セッション開始();
isset($_SESSION['num']) または die ("セッションなし");
If ($_SESSION['num']==400){
「& lt; 前 & gt;」を印刷します。
print_r($ _ post);
'& lt; a href =" '. $ _Server [' PHP_SELF '].' "& GT;/A & GT;
「& lt;/pre & gt;」を印刷します。
$_SESSION['num']=500;
「& lt; 前 & gt;」を印刷します。
print_r($ _ post);
echo "ただし送信しました";
「</pre>」を印刷します。
} それ以外 {
session_start() または die("セッションが開始されていません");
$_SESSION['num']= 400;
?>
<フォームアクション="" メソッド="POST">
名前:
メール:
ビール:
<名前="ビール[]"を複数選択>
選択>
フォーム>
?>
例、smarty に基づくデモ版
コードをコピー
$smarty->assign('code',$code);
$code = mt_rand(0,1000000);
setcookie('addtips',$code,time()+300);
if(isset($_POST['submit']) ){
if($_COOKIE['addtips']!= $_POST['code']){
echo "このページを更新したり、フォームを繰り返し送信しないでください。";
終了();
}
}
コードをコピー
10./////フォームの繰り返し送信を防止する
tplテンプレート内
*/
技術記事繰り返しの送信を防ぐことは、Web 開発において現実的でよく発生する問題であることに加えて、データベースに直接クエリを実行して、ユーザーが同じデータを送信したかどうかをフィルタリングすることもできます...
Session_start();//現在のセッションに基づいて乱数を生成します
$code = mt_rand(0,1000000);
$_SESSION['コード'] = $コード;
//フォーム内のパスを非表示にする:
< input type="hidden" name="originator" value="< ?=$code?>">
//受信ページのコードは次のとおりです:
セッション開始();
if(isset($_POST['originator'])) { http://www.bkjia.com/PHPjc/633153.html
$_SESSION['コード']){
echo 'このページを更新しないでください。または
もう一度フォームを送信してください。 』;
}
}
http://www.bkjia.com/PHPjc/633153.html
www.bkjia.com
true