2

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

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

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

我试图生成一个randomphp函数来生成一个数字,然后检查MySQL,如果数字存在,再生成一个,直到我得到一个未使用的,然后提交......这很慢,显然不是最好的方法...

4

5 回答 5

5

Maybe you can use uniqid(), which will generate an unique id

于 2013-07-31T13:37:28.007 回答
2

JMSSecurityExtraBundle 中还有一个功能可能会有所帮助。查看文档:http: //jmsyst.com/bundles/JMSSecurityExtraBundle/master/random_number_generator

于 2013-07-31T14:09:19.930 回答
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。

希望这可以帮助。

于 2013-07-31T21:18:46.100 回答
1

你可以加入当前的 linux 时间戳和用户的 session-id 来获得一个 unique-id。

于 2013-07-31T11:39:22.063 回答
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 )

于 2013-07-31T16:43:50.467 回答