在PHP会话期间停止随机字符串的重复

时间:2012-02-08 17:20:31

标签: php random session-variables

我使用以下PHP生成一些(通常是3个)随机字符串,并将它们放在会话变量中以用作控件。

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);
}

如何消除在同一会话中可能多次生成相同随机字符串的罕见情况?我不希望任何会话变量都相同。

由于

2 个答案:

答案 0 :(得分:1)

我认为你应该简单地依靠一个好的算法来生成随机标识符(特别是如果你希望这些会话变量的数量随着时间的推移而增长,那么你需要一个可扩展的解决方案);存在UUID生成算法,保证在太阳系的整个生命周期中两次生成相同的uuid几乎没有可能的概率。

试着看一眼:http://pecl.php.net/package/uuid

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

答案 1 :(得分:0)

如此简单的事情:

  

$ rand = microtime(true).rand()?