重新发放令牌

时间:2010-12-02 00:37:21

标签: php session

在我的表单中,我有一个保存在会话中的令牌,并且在提交表单时必须存在:

$token = hash('sha256', rand() . microtime() . $_SERVER['REMOTE_ADDR']) // rand as possible
$_SERVER['token'] = $token;

现在我有一个隐藏值的形式:

<input type="hidden" name="token" value="<?php echo $token;?>">

当我提交此表单时,我会检查它是否与会话中的令牌匹配:

if ($_POST['token'] !== $_SESSION['token'])
{
// show error here
}
else
{
//carry on normally
}

但是,如果用户填写表单不正确,会发生什么?我无法在会话中再次更改令牌,因为已经发送了输出。你有什么建议?

2 个答案:

答案 0 :(得分:0)

我建议您不要发送任何输出,只要您没有准备好标题,会话等。您可以在请求结束时生成输出,或者(如果无法使用第一个解决方案)查看手册“输出缓冲”。

答案 1 :(得分:0)

即使输出已发送,您也可以在会话中更改内容。在发送内容后,您无法启动会话,但是一旦您发送了会话标题(这应该是您做的第一件事之一),您就可以在会话中修改数据在请求期间的任何时间。