我有一个问题,我希望有人能够提供帮助。 我试图实现一个令牌系统(使用php),但由于某种原因,它一直在失败。
这是我在HTML表单中放置的代码(我也尝试将代码放在表单标记中)
// --------------------------------------------- ----
<?php
session_start();
$form_token = uniqid();
$_SESSION['form_token'] = $form_token;
?>
// --------------------------------------------- ---------
表格上还有一个隐藏字段
<input type="hidden" name="form_token" value="<?php echo $form_token; ?>" />
// --------------------------------------------- -------------
在对表单进行求和时,将运行以下脚本:
<?php
session_start();
if(isset($_POST['sumbitcheck'])) {
include('connect.php');
}
if ($_POST['form_token'] !== $_SESSION['token'])
{
echo("Invalid Submission");
}
if($_POST['form_token']== $_SESSION['form_token'])
{
echo("Accees");
}
?>
// -------------------------------------------- < / p>
出于某种原因,它回复了无效的提交内容。并且匹配从不=真可以有人帮忙吗?
非常感谢,
答案 0 :(得分:1)
此:
$_POST['form_token'] !== $_SESSION['token']
应该是:
$_POST['form_token'] !== $_SESSION['form_token']
这是因为您提交的名称为form_token
的隐藏字段,而不是token
。
如果你愿意,你可以这样做:
<input type="hidden" name="token" value="<?php echo $form_token; ?>" />
在这种情况下,您当前的代码会起作用。
答案 1 :(得分:0)
因为这......
if ($_POST['form_token'] !== $_SESSION['token'])
需要这样......
if ($_POST['form_token'] !== $_SESSION['form_token'])
答案 2 :(得分:0)
改变这个:
if ($_POST['form_token'] !== $_SESSION['token'])
对此:
if ($_POST['form_token'] !== $_SESSION['form_token'])
另外,查看uniqid()函数的手册。它不应该用于安全目的。