ホームページ  >  記事  >  バックエンド開発  >  PHP はフォームの繰り返し送信を防ぐためにトークンを生成します

PHP はフォームの繰り返し送信を防ぐためにトークンを生成します

WBOY
WBOYオリジナル
2016-06-23 13:25:53944ブラウズ

1. 送信ボタンを無効に設定します

ユーザーが送信すると、ボタンはすぐに無効な状態に設定されます。これはjsを使って実装されています。

送信前のコードは次のとおりです:


$("#submit").attr('disabled','true');

$("#submit").val("送信してください。 wait ");

実行後、ボタンを元の状態に設定します

コードは次のとおりです:


$('#submit ').removeAttr('disabled');

$("# submit ").val ("送信の確認");

これは、いくつかの単純なフロントエンド送信のためのものです。フォームを作成し、ウェブマスターがそれを送信すると、php ロジック層ファイルはさまざまな js をフィルターします。

有効期限メソッド

ユーザーがボタンを送信した後、トークンが生成され (トークンはビジネス送信ごとに一意の値です)、セッションに保存され、有効期限が設定されます。ユーザーがこれを再度送信すると、トークンが整合性があり、有効期限が切れているかどうかを確認します。整合性があり、有効期限が切れていない場合は、2 回送信されたとみなされます

Example


/*

* PHPは単純にトークンを使用する フォームの重複送信を防ぐ

* この処理方法は初心者向けの参考用です

*/

session_start();

function set_token() {

$_SESSION['token'] = md5 (microtime(true) );

}

関数 valid_token() {

$return = $_REQUEST['token'] === $_SESSION['token'] true : false;

set_token();

return $return ;

}

//トークンが空の場合、トークンを生成します

if(!isset($_SESSION['token']) || $_SESSION['token']=='' ) {

set_token( );

}

if(isset($_POST['test'])){

if(!valid_token()){

echo "トークン エラー";

}else{

echo '正常に送信されました、値:'.$_POST['test'];

}

}

?>

< input type="hidden" name="token" value="">

方法 2


//セッションを開く

session_start();

// 送信 ID がある場合

if(isset($_GET['action']) && $_GET['action'] === 'save'){

// ある場合はセッションであり、渡された値と同じです 送信されたとみなされます

if(isset($_SESSION['__open_auth']) && isset($_POST['auth']) && $_SESSION['__open_auth'] = = $_POST['auth']){

print_r ($_POST);

$_SESSION['__open_auth'] = null;//クリア

} else {

//始めましょう

header("location : post.php");

}

exit ();

}

//認可

$auth = $_SESSION['__open_auth'] = time();

?>

< !doctype html>

post

  • &それ;/body>

    Mysql php データベースは重複レコードを防止します

    $link=mysql_connect('localhost','root','root'); // MySQL データベース接続を取得します

    $username=$_GET[" name"] // クライアント フォームから渡されたデータを取得します

    $q="select * from user_name='$username'"; "SET NAMES gb2312"); //中国語の文字化けコードを避ける

    $rs = mysql_query($q, $link) //データベースをクエリする

    $num_rows = mysql_num_rows($rs);クエリ結果の行数

    if($num_rows==0)

    {

    $exec="学生 (user_name) の値に挿入 ($username)"

    mysql_query("SET NAMES gb2312"); $exec, $ link); // 該当するユーザーが存在しない場合は、データベースにデータを挿入します (登録ユーザー)

    echo "ユーザー登録が成功しました!"

    else

    {

    echo "ユーザー名はすでに存在します。もう一度お試しください。 ユーザー名を選択してください! ";

    }

    ?>

    セッションの有効期限設定方法で非常に重要な点は、セッションが設定され、送信が成功または失敗したときのセッションの検証です。これはログインに似ています。ログインが成功した場合、セッションをクリアする原理も同様です。

    りー

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。