UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#180 トークンを使用して重複登録を防ぐ方法 PHP

記入日:2023-07-07 編集日:2023-07-07

トークンを使用して重複登録を防ぐ方法について解説してみようと思います。

この記事を読むと(約5分)
トークンを使用して重複登録を防ぐ方法についてイメージできます。

トークンを使用して重複登録を防ぐ方法

トークンを使用して重複登録を防ぐ方法は、セッションと一意なトークンを組み合わせて実装することができます。以下に、PHPを使用してこのようなロジックを実現する方法を説明します。

1. まず、セッションを開始します。PHPでは、`session_start()` 関数を使用してセッションを開始できます。


2. 重複登録を防ぐために、一意のトークンを生成します。PHPでは、`uniqid()` 関数を使用して一意のトークンを生成できます。このトークンはセッション内に格納されます。

$token = uniqid();
$_SESSION['token'] = $token;


3. フォームを作成する際に、このトークンを含めます。通常、隠しフィールドを使用してフォームに埋め込む方法が一般的です。
<form action="process.php" method="POST">
  <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
  <!-- その他のフォームフィールド -->
  <input type="submit" value="Submit">
</form>


4. フォームが送信されたとき、サーバーサイドでトークンの検証を行います。これにより、重複登録を防ぐことができます。
session_start();

if (!isset($_POST['token']) || $_POST['token'] !== $_SESSION['token']) {
  // POSTがないか、トークンが一致しない場合、重複登録とみなす
  echo "Duplicate submission detected.";
  exit;
}

// トークンが一致した場合、処理を続行する
// ...

// 処理が完了したら、新しいトークンを生成してセッションに保存する
$newToken = uniqid();
$_SESSION['token'] = $newToken;



この方法では、セッション内のトークンを使用してフォームの送信元を確認し、重複登録を防ぐことができます。攻撃者が同じトークンを持つフォームを再送信しようとした場合、サーバーサイドの検証でトークンが一致しないため、重複登録として処理されます。

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。