2013-07-31 52 views
2

我正在開發一個網站,我需要一種方式來創建一個令牌時,表單提交給MySQL,它需要是唯一的,像ID列。Symfony2獨特的令牌生成器

例如,當我提交表單時,它會向DB插入表單數據加上Token = TXXXXXX或其他任何內容,實際上,格式將取決於某些內容,但我認爲我可以自己處理,我只需要這種方式在DB內創建獨特的令牌...

有沒有人知道這樣做的好方法?

我試圖生成一個random php函數來生成一個數字,然後檢查MySQL,如果該數字存在,生成另一個,直到我有一個未使用的,然後提交...這是緩慢的,顯然是不是最好的方法...

+0

在將自己的希望寄託在免費的代碼生成器之前,請謹慎告訴我們您已經嘗試過的一切嗎? –

+0

已更新爲您的請求 –

+0

如果您的表具有指定的正確主鍵,您可以像創建令牌一樣創建令牌:'md5($ val1。$ val2);'其中'$ val1'和'$ val2'是使主鍵。如果你要添加大量的數據到這個數據庫,並且你對'md5'造成的散列衝突感到厭倦,請使用'sha1'或更高版本 –

回答

1

你可以加入當前的linux時間戳和用戶的session-id來獲得一個唯一的ID。

5

也許你可以使用uniqid(),這將產生一個唯一的ID

+1

來自doc:這個函數實際上並不生成密碼安全的令牌沒有傳遞任何附加參數,返回值與'microtime()'有點不同。如果您需要生成加密安全令牌,請使用'openssl_random_pseudo_bytes()'。 http://php.net/uniqid – Quentin

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.

希望這會有所幫助。