Передача токена через $ _SESSION и $ _POST — если оператор вызывает проблемы?

Я внедряю защиту от CSRF, и мне было очень тяжело. Поэтому я генерирую токен и сохраняю его в $_SESSION['token'], Теперь мне понадобится этот токен для сравнения на другой странице, поэтому на другой странице я делаю это:

session_start();
$token = "";
$token = $_SESSION['token'];
echo $token;

unset($_SESSION['token']);
echo "<br />";

$compToken = "";
$compToken = $_POST['token'];
echo $compToken;

PHP требует от меня установки переменных на что-либо, иначе это недопустимо. Вот вывод к этому:

41852450b2fbeed352d895d8ee57dfc9
41852450b2fbeed352d895d8ee57dfc9

Как видите, они соответствуют токенам. Теперь, когда я перехожу к оператору if, чтобы сравнить то, что я только что получил из формы, прежде чем приступить к обработке:

if($compToken === $token) {
return true;
} else {
echo "Token error.";
return false;
}

Это просто не работает, об ошибках также не сообщается. Я даже пытался if($_SESSION['token'] === $_POST['token']), который должен работать, поскольку обе переменные были успешно переданы и сохранены (как показано в предыдущем коде).

Что происходит с if statement?

РЕДАКТИРОВАТЬ:

session_start();
$token = md5(uniqid(mt_rand(), true));
$_SESSION["token"] = $token;

Хорошо, часть ниже — беспорядок — для целей отладки. Сожалею!

session_start();
$token = "";
$token = $_SESSION['token'];
$token = trim($token);
echo $token;
unset($_SESSION['token']);
echo "<br />";
$compToken = "";
$compToken = $_POST['token'];
$compToken = trim($compToken);
echo $compToken;
echo "<br />";
echo"1";
if($compToken == $token) {
return true;
} else {
echo "Token error.";
return false;
}
echo "2";

EDIT2:

Для тех, кто читает это в будущем, похоже, что проблема возвращалась к истине для оператора if в оригинале edit, Я не уверен почему — но меняю это просто echo "true"; похоже на работу. Я собираюсь настроить if statement только return false; and die(); если они не равны друг другу.

1

Решение

Я только что попробовал, ты удостоверился, что у тебя есть это в твоей форме:

<input type="hidden" name="token" value="<?=$_SESSION['token'];?>" />

Вот мой код:
form.php

<?php
session_start();
$_SESSION['token'] = 'abc123abc123';

?>

<form action="index.php" method="post">
<input type="hidden" name="token" value="abc123abc123" />
<input type="submit" value="Submit">
</form>

Здесь форма отправляет сообщения:
index.php

<?php

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

$compToken = $_POST['token'];

if($compToken === $token) {
echo 'True';
} else {
echo "Token error.";
}

И это повторяет «Правда».

1

Другие решения

Других решений пока нет …