Symfony2唯一令牌生成器

时间:2013-07-31 10:53:41

标签: php mysql forms symfony token

我正在开发一个网站,我需要一种方法来在将表单提交给MySQL时创建一个令牌,它需要是唯一的,比如ID列。

例如,当我提交表单时,它会向表单数据加上Token = TXXXXXX或者其他任何内容,实际上,格式将取决于某些内容,但我认为我可以自己处理它,我只需要在DB中创建该唯一令牌的方法......

有谁知道这样做的好方法?

我试图生成一个random php函数来生成一个数字,然后检查MySQL,如果数字存在,生成另一个,直到我得到一个未使用的,然后提交...其中很慢,显然它是最好的方式......

5 个答案:

答案 0 :(得分:5)

也许您可以使用uniqid(),这将生成一个唯一ID

答案 1 :(得分:2)

JMSSecurityExtraBundle中还有一个函数可能会有所帮助。 请参阅文档:http://jmsyst.com/bundles/JMSSecurityExtraBundle/master/random_number_generator

答案 2 :(得分:2)

我使用此函数生成随机令牌:

public static function random($length = 16)
{
    if (function_exists('openssl_random_pseudo_bytes'))
    {
        $bytes = openssl_random_pseudo_bytes($length * 2);

        if ($bytes === false)
        {
            // throw exception that unable to create random token
        }

        return substr(str_replace(array('/', '+', '='), '', base64_encode($bytes)), 0, $length);
    }

    return ;
}

您可以传递给函数的整数参数将确定令牌长度。默认为16。

希望这有帮助。

答案 3 :(得分:1)

您可以加入当前的linux时间戳和用户的session-id来获取唯一ID。

答案 4 :(得分:1)

使用Symfony 2.3,你有一个类Symfony \ Component \ Security \ Core \ Util \ SecureRandom(https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Core/Util/SecureRandom.php