PHP中的uniqid在高並發下的重複問題,phpuniqid

來源:互聯網
上載者:User

PHP中的uniqid在高並發下的重複問題,phpuniqid

最近項目中有用到產生token校正的問題。首先考慮用php中的uniqid()函數產生隨機串,但是由於該函數好似基於微秒時間層級的。在高並發的情況下,就有可能會產生相同的值。

解決方案1:uniqid(rand(1,10000)), 該函數的第一個參數可用作產生數的首碼,如此,大大降低了產生數的重複率。但是重複的可能性還是存在的

解決方案2:md5(uniqid()),  使用md5()函數,可產生絕對唯一的值


php 裡面幫我解釋一下uniqid()這個函數;我在php手冊裡面找是英文的

uniqid
產生只一的值。
文法: string uniqid(string prefix);
傳回值: 字串
函數種類: 編碼處理
內容說明
本函數會依據當時的毫秒以及指定的前置字串產生一個獨一無二的字串。參數 prefix 為前置的字串,最多可達 114 字元。

echo uniqid();可以看到uniqid始終是一個不斷變化的長度為13的十六進位數。
<?php
echo hexdec(uniqid())/(time()+microtime());
?>
輸出基本上在1048576左右。
可以斷定,uniqid就是目前時間精確到微秒再乘以1048576(2的20次冪)最後轉換為十六進位得到的。
知道uniqid與time的關係後uniqid就可以有更廣泛的用途了,比如用文本論壇可以用uniqid作為文章的檔案名稱。
做在文章索引中,可以很方便的按時間尋找文章。
參考資料:hi.baidu.com/...7.html
 
在學PHP,問在什情況下使用uniqid()?

846189340160532f6c51bf26ab596f55

檢測安全瑪的時候會用到

<?phpechomd5(uniqid(rand(),1));
?>

亂數的時候也會用到
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.