会话变量失败,php问题

会话变量失败,php问题,php,forms,session,Php,Forms,Session,这就是我如何开始我的代码 然后,我将taht$token变量传递给以下形式的隐藏字段: session_start(); $token = md5(uniqid(rand(), TRUE)); $_SESSION['token'] = $token; 在提交页面上,将为会话分配一个新值 试试看 在“提交”页面上,将为会话分配一个新值 试试看 尝试将$\u会话['token']回显到表单中,而不是$token,以防在创建令牌和表单输出之间意外地重新分配它 我曾经遇到过一个与此非常相似的问题,当时

这就是我如何开始我的代码

然后,我将taht$token变量传递给以下形式的隐藏字段:

session_start();
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token;

在提交页面上,将为会话分配一个新值

试试看


在“提交”页面上,将为会话分配一个新值

试试看


尝试将
$\u会话['token']
回显到表单中,而不是
$token
,以防在创建令牌和表单输出之间意外地重新分配它

我曾经遇到过一个与此非常相似的问题,当时我正在开发一个花了很多时间才找到的东西,结果发现这是因为我留下了一个
,因为我还没有图像-这导致再次请求页面,因为空的
src
表示“此页面”,因此,在加载页面后重新生成令牌


另一件需要检查的事情是,如果表单的
action
属性丢失,或者某个指向自身的值丢失,则在提交表单时,在
if(…)
语句之前,可能会重新生成令牌。

尝试将
$\u会话['token']
回送到表单中,而不是
$token
,如果您在创建令牌和表单输出之间意外地重新分配了它

我曾经遇到过一个与此非常相似的问题,当时我正在开发一个花了很多时间才找到的东西,结果发现这是因为我留下了一个
,因为我还没有图像-这导致再次请求页面,因为空的
src
表示“此页面”,因此,在加载页面后重新生成令牌


要检查的另一件事是,如果表单的
action
属性丢失,或者某个指向自身的值丢失,则在提交表单时,在
if(…)
语句之前,可能会重新生成令牌。

,因为您在检查令牌之前会重新生成令牌。您必须在确定它不相同后更改它,因为您在检查它之前重新生成了您的令牌。您必须在确定它不相同后更改它

您可以这样做,以防止在每次页面加载时重置令牌:

session_start();
if(!isset($_SESSION['token']))
{
 $token = md5(uniqid(rand(), TRUE));
 $_SESSION['token'] = $token;
}
但是。。。比起在过程标准的基础上解决这个问题,您可能更适合使用一些包含细粒度安全性的开源会话类。(如果操作正确,您的代码就不必在实际使用会话的任何地方进行更改。)
有关更多信息,请参阅。

您可以执行类似操作,以防止在每次页面加载时重置令牌:

session_start();
if(!isset($_SESSION['token']))
{
 $token = md5(uniqid(rand(), TRUE));
 $_SESSION['token'] = $token;
}
但是。。。比起在过程标准的基础上解决这个问题,您可能更适合使用一些包含细粒度安全性的开源会话类。(如果操作正确,您的代码就不必在实际使用会话的任何地方进行更改。)
有关更多信息,请参阅。

您提供的代码位于一个文件中,您可以将其提交给自己。 重新生成令牌并分配给会话变量的。正如“AVD”所说,是防止重新分配它的代码

session_start();
if (!isset($_SESSION['token']))
{
    $token = md5(uniqid(rand(), TRUE));
    $_SESSION['token'] = $token;
}

然后,您可以比较要检查的条件。

您提供的代码位于一个文件中,您可以将其提交给自己。 重新生成令牌并分配给会话变量的。正如“AVD”所说,是防止重新分配它的代码

session_start();
if (!isset($_SESSION['token']))
{
    $token = md5(uniqid(rand(), TRUE));
    $_SESSION['token'] = $token;
}

然后,您可以比较要检查的条件。

如果值不正确,则在进行比较时,
$\u POST['token']
$\u SESSION['token']
中的内容是什么?隐藏字段称为POST,,SESSION变量称为token,php变量称为token$令牌,在所有这些令牌中都应该是相同的,可能是因为每次页面加载/重新加载时都会生成
$token
,并且在验证表单数据之前会对其进行更改?您是否尝试回显令牌以查看它们是否真的包含相应的值?(echo$_POST['token'];echo$_SESSION['token'];)我应用了这种方法和AVD提供的代码,现在它可以工作了..谢谢
$_POST['token']
$_SESSION['token']
当您进行比较时,如果值不正确,隐藏的字段称为POST,,会话变量称为token,php变量称为token$令牌,在所有这些令牌中都应该是相同的,可能是因为每次页面加载/重新加载时都会生成
$token
,并且在验证表单数据之前会对其进行更改?您是否尝试回显令牌以查看它们是否真的包含相应的值?(echo$_POST['token'];echo$_SESSION['token'];)我应用了这种方法和AVD提供的代码,它现在可以工作了。谢谢你的帮助。我还没想过。。我确实认为表格自我更新非常有帮助。我还没想过。。我真的认为表单会自我更新是的,它解决了问题是的,它解决了问题
session_start();
if(empty($_SESSION['token'])){
    $token = md5(uniqid(rand(), TRUE));
    $_SESSION['token'] = $token;
}