每次刷新页面时为什么rand()?

时间:2013-05-17 17:12:12

标签: php

我想运行迷你程序以确认安全问题:

$questions = array('dog legs','car legs','the best country in the world');
$answers = array(4,4,'USA');
$questionId = rand(0, (count($questions)-1));

然后

$ans = $_POST['answer'];
if($ans == $answers[$questionId]){echo 'Confirmed !';}

所以问题是,每次我回答答案都不正确,因为在发送表单后,rand函数会运行并更改问题!任何解决方案?

3 个答案:

答案 0 :(得分:5)

您可以在表单中传入隐藏输入,其值为问号ID,这样就会重新发送ID。

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

然后检查表单是否已提交。

<?php
if ($_POST['questionID'])
    $questionID = $_POST['questionID'];
else
    $questionID = rand(0, (count($questions)-1));

您还可以使用base64编码

来保护所有这些

答案 1 :(得分:4)

最佳方式:

基本上,您需要将问题ID保存到用户会话中。

解决方法:

如果要复杂,请执行以下操作。

创建一个秘密字符串。 从秘密字符串+正确答案创建md5。 将md5写入表单隐藏字段。 在表单提交时,检查秘密字符串+给定答案是否从表单返回md5。

除非有人知道你的秘密字符串,否则即使没有会话也是安全的。

注意

我的解决方法与在另一个答案中将问题ID存储到sugegsten表单中的问题相同:人们可以简单地操纵问题ID以始终显示一次解决的问题。会话是唯一或多或少安全的方式

祝你好运

泽索特

答案 2 :(得分:3)

你需要知道原始问题是什么。最简单的方法就是将表单中的问题作为隐藏输入发布:

<form>
    <?php echo $questionID; ?>
    <input type="text" name="answer" />
    <input type="hidden" name="question" value="<?php echo $questionID; ?>" />
</form>

并做

$questions  = array('dog legs','car legs','the best country in the world');
$answers    = array(4,4,'USA');
$questionID = rand(0, (count($questions)-1));

if (isset($_POST['answer'])) {
    $answer   = $_POST['answer'];
    $question = $_POST['question'];

    if ( $questions[ $question ] == $answer ) // you're golden
}