1

以下のコードを使用してボタンを2回クリックすると、ユーザーがフォームを2回送信するのを防ごうとしています。

// Check token is present
if (!isset($_POST['token'])) {
    // Token missing
    exit();
}

// Check token matches session value
if ($_POST['token'] != $_SESSION['token']) {
    // Token mismatch
    exit();
}

// Valid submission - Invalidate token
unset($_SESSION['token']);


// Make payment
$result = makePayment(); // cURL request to api

問題は、それが機能してunset($_SESSION['token'])いないように見えることです。2 番目の要求では、トークンはまだセッション内にあります。次の送信までにセッション値がクリアされていないためだと思います。

同様の質問への回答: https://stackoverflow.com/a/1025919/1587851 session_write_close()が提案されており、設定解除が機能した後に追加すると思いますが、それが何をするのかよくわかりません:

// Valid submission - Invalidate token
unset($_SESSION['token']);
session_write_close();

2 つの質問:

  1. このソリューションに問題はありますか?
  2. session_write_close() を呼び出した後でもセッション変数を取得および設定できますか?

ありがとう。

関連する可能性があります。ADOdbを使用してセッションデータをデータベースに保存しています

4

1 に答える 1