Остановить дублирование случайной строки во время сеанса PHP - PullRequest
0 голосов
/ 08 февраля 2012

Я использую следующий 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 ]

1 голос
/ 08 февраля 2012

Я думаю, вы должны просто положиться на хороший алгоритм для генерации случайных идентификаторов (особенно если вы ожидаете, что количество таких переменных сеанса будет расти со временем, и поэтому вам нужно масштабируемое решение); Существуют алгоритмы генерации UUID, которые гарантированно имеют едва заметную вероятность генерировать один и тот же uuid дважды за все время существования Солнечной системы.

Попробуйте взглянуть на это: http://pecl.php.net/package/uuid

Теория о UUID: http://en.wikipedia.org/wiki/Uuid#Version_4_.28random.29

0 голосов
/ 09 февраля 2012

Как насчет чего-то действительно простого, например:

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

...