/ La función / random genera 2 cuerdas largas, ¿es mala suerte o rand () no es aleatorio? - php, random

la función aleatoria genera 2 cuerdas largas iguales, ¿es mala suerte o rand () no es aleatorio? - php, aleatorio

Encontré un problema extraño hoy con la función RAND (). He escrito una clase de administración de sesión que genera un ID de sesión aleatorio usando esta función que escribí

private function generateSessionID($len = 40) {
$characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,-";
$newStr = "";
$maxLen = strlen($characters)-1;
for ($i = 0; $i < $len; ++$i)
$newStr .= $characters[rand(0, $maxLen)];

return $newStr;
}

El problema es que dos cadenas aleatorias fuerongenerado en el mismo día, lo que hace que un usuario inicie sesión como otro usuario. ¿Cómo pudo pasar esto? ¿Hay pasos simples detrás de rand () para que retroceda y se genere de la misma manera de nuevo? ¿Qué pudo causar que se vuelva a generar lo mismo otra vez?

De hacer una investigación aprendí que usando mt_rand() es mucho mejor que rand() y también hice un uso de str_shuffle() Así que cambié la función a esta

private function generateSessionID($len = 40) {
$characters = str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,-");
$newStr = "";
$maxLen = strlen($characters)-1;
for ($i = 0; $i < $len; ++$i)
$newStr .= $characters[mt_rand(0, $maxLen)];

return $newStr;
}

¿Puede alguien ayudarme a entender cuál podría ser el problema aquí? ¿Por qué se generaron dos cadenas de "40 caracteres" en un día?

Gracias

Respuestas

0 para la respuesta № 1

Bueno, al azar es, de hecho, al azar. El uso de números aleatorios no le garantiza una cadena única de 40 caracteres cada vez, lo mejor que puede hacer es darle una alta probabilidad de que no genere la misma cadena. Es una lotería de identificaciones de sesión y alguien acaba de ganar la lotería ese día.

Si quieres mantener tu generador actual, ¿quéLo que haría sería generar la ID de sesión, verificar si ya se usó, y si ha vuelto a llamar a la función hasta que obtenga una única. O podría hacer algo como generar su ID aleatoria, agregar una marca de tiempo sobre ella, luego la hash.