Вы видели комментарий пользователя "Ofir Baruch"? Мне кажется правильным.
Вам просто нужно объединить два подхода, которые вы уже попробовали, сделать это правильно, и, как сказал Офир Барух, иметь уникальный сеанс токена для каждой формы.
Более или менее так:
form1.php
session_start();
if (empty($_SESSION['form_tokens']['form1']))
{
$_SESSION['form_tokens']['form1'] = generate_random_token();
}
if (isset($_POST['token']))
{
if ($_POST['token']) != $_SESSION['form_tokens']['form1'])
{
// the token is invalid - do not process the form
redirect('/some_page');
}
else
{
// process the form here
if ($success)
{
// reset the token for this form
unset($_SESSION['form_tokens']['form1']);
redirect('/another_page');
}
}
}
<form id="form1">
<input type="hidden" name="token" value="<?php echo $_SESSION['form_tokens']['form1']; ?>" />
<input type="submit" value="Submit" />
</form>
В form2.php вы бы сделали то же самое, но вместо этого использовали бы свой уникальный токен:
$_SESSION['form_tokens']['form2']
Если вы хотите запретить ТАКЖЕ использовать два разных браузера - или даже компьютера - и это так важно, тогда вам следует заняться этим в другом месте - я имею в виду, вы не должны допускать, чтобы у одного и того же ПОЛЬЗОВАТЕЛЯ могло быть ДВЕ СЕССИИ. Есть несколько способов сделать это, но это другой вопрос.