我正在开发一个网站,我需要一种方法来在将表单提交给MySQL时创建一个令牌,它需要是唯一的,比如ID列。
例如,当我提交表单时,它会向表单数据加上Token = TXXXXXX
或者其他任何内容,实际上,格式将取决于某些内容,但我认为我可以自己处理它,我只需要在DB中创建该唯一令牌的方法......
有谁知道这样做的好方法?
我试图生成一个random
php函数来生成一个数字,然后检查MySQL,如果数字存在,生成另一个,直到我得到一个未使用的,然后提交...其中很慢,显然它是不最好的方式......
答案 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)