2012-02-08 41 views
0

我正在使用以下PHP来生成几个(通常是3个)随机字符串,并将它们放在会话变量中以用作控件。在PHP会话期间停止随机字符串的重复

function session_var($type) { 
if (!isset ($_SESSION[$type])) { 
$_SESSION[$type] = rand_string(5); 
} 
} 

function rand_string($length) { 
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  
$size = strlen($chars); 
$str = ''; 
for($i = 0; $i < $length; $i++) { 
$str .= $chars[ rand(0, $size - 1) ]; 
} 
return ($str); 
} 

我如何消除在同一个随机字符串可能在同一个会议上产生多于一次难得的机会?我不希望任何会话变量是相同的。

感谢

+0

使用'uniqid()',而不是生成自己的... http://php.net/manual/en/function.uniqid.php(假设有数字在那里是没有问题的) – 2012-02-08 17:25:39

+0

的懒惰和垃圾的方法是'in_array()'并且在重复时再次生成字符串,但是我相信有人有比这更好的方法,所以这不会成为答案。 – DaveRandom 2012-02-08 17:26:36

+0

[PHP的:如何生成一个随机的,唯一的,字母数字字符串?]的可能重复(http://stackoverflow.com/questions/1846202/php-how-to-generate-a-random-unique-alphanumeric-string) – 2012-02-08 17:26:56

回答

1

我想你应该单纯依靠一个好的算法随机标识符生成(特别是如果你希望这样的会话变量的数量随时间增长,所以你需要一个可扩展的解决方案);有UUID生成算法,保证在太阳系的整个生命周期内生成两次相同的uuid的概率几乎不可估计。

尝试对此一目了然:http://pecl.php.net/package/uuid

理论有关的UUID:http://en.wikipedia.org/wiki/Uuid#Version_4_.28random.29

0

怎么样很简单的类似:

$兰特= microtime中(真).rand() ?