Safari正在导致会话变量被更改

时间:2015-05-19 23:00:10

标签: php safari

我正在验证表单输入并确保用户没有两次提交表单。我是用以下课程做的:

    <?php

//You can of course choose any name for your class or integrate it in something like a functions or base class
class formKey
{
    //Here we store the generated form key
    private $formKey;

    //Here we store the old form key (more info at step 4)
    private $old_formKey;

    //The constructor stores the form key (if one excists) in our class variable
    function __construct()
    {
        //We need the previous key so we store it
        if(isset($_SESSION['form_key']))
        {
            $this->old_formKey = $_SESSION['form_key'];
        }
    }

    //Function to generate the form key
    private function generateKey()
    {
        //Get the IP-address of the user
        $ip = $_SERVER['REMOTE_ADDR'];

        //We use mt_rand() instead of rand() because it is better for generating random numbers.
        //We use 'true' to get a longer string.
        //See http://www.php.net/mt_rand for a precise description of the function and more examples.
        $uniqid = uniqid(mt_rand(), true);

        //Return the hash
        return md5($ip . $uniqid);
    }


    //Function to output the form key
    public function outputKey()
    {
        //Generate the key and store it inside the class
        $this->formKey = $this->generateKey();
        //Store the form key in the session
        $_SESSION['form_key'] = $this->formKey;

        //Output the form key
        echo "<input type='hidden' name='form_key' id='form_key' value='".$this->formKey."' />";
    }


    //Function that validated the form key POST data
    public function validate()
    {
        //We use the old formKey and not the new generated version
        if($_POST['form_key'] == $this->old_formKey)
        {
            //The key is valid, return true.
            unset($_SESSION['form_key']);
            return true;
        }
        else
        {
            //The key is invalid, return false.
            return false;
        }
    }
}
?>

这是输出到这样的形式:

include STYLESHEETPATH . '/formkey.class.php';
$formKey = new formKey();
$formKey->outputKey();

如果我回复old_formKey和帖子form_key,它们就完全相同,并且可以在Safari以外的每个浏览器中使用。如果我在Safari中检查这些内容,old_formKey总是不同的。为什么会这样?

0 个答案:

没有答案