responder registro recibido por mensaje mail enviar electronico ejemplos ejemplo correo confirmación confirmacion como php email-validation

php - registro - Generando un código de confirmación para una confirmación por correo electrónico



enviar email de confirmación (5)

1) Crear un campo activado en la base de datos

2) Después del registro, se envía el correo electrónico

3) Crear un enlace para incluir en el correo electrónico, usar un identificador único Se vería algo como esto

Bienvenido Nombre de usuario Gracias por registrarse.

Haga clic en el enlace a continuación para activar su cuenta

domain.com/register.php?uid=100&activate=1

4) Actualice el campo activado a verdadero

texto alternativo http://www.jackborn.com/wpress/wp-content/uploads/2008/02/confirmsubs2.gif

$email_encrypt = urlencode($email); $special_string = ''maybeyourcompanynamereversed?''; $hash = md5($email_encrypt.$special_string); Here is the link that is sent to the email that was provided: http://yourdoman.com/confirm.php?hash=''.$hash.'' The actual link will look something like this: http://yourdomain.com/confirm.php?hash=00413297cc003c03d0f1ffe1cc8445f8

Usando PHP, ¿cuáles son algunas formas de generar un código de confirmación aleatorio que pueda almacenarse en un DB y ser utilizado para la confirmación por correo electrónico? No puedo, por mi vida, pensar en una forma de generar un número único que pueda generarse a partir del perfil de un usuario. De esa manera puedo usar una función para hacer que el número sea lo suficientemente pequeño como para ser incluido en la URL ( ver este enlace ). Recuerde, el usuario debe hacer clic en el enlace para "confirmar / activar" su cuenta. Si no puedo usar números, no tengo problemas para usar letras y números.

Dicho esto, he intentado hash el nombre de usuario junto con un "salt" para generar el código aleatorio. Sé que tiene que haber una mejor manera, así que escuchemos.


Decidí que necesitaba algo un poco más sólido y una funcionalidad añadida. Así que esto es lo que se me ocurrió.

/** * Hash Gen * @author Kyle Coots * @version 1.0 * Allow you to create a unique hash with a maximum value of 32. * Hash Gen uses phps substr, md5, uniqid, and rand to generate a unique * id or hash and allow you to have some added functionality. * * @see subtr() * @see md5() * @see uniqid() * @see rand() * * You can also supply a hash to be prefixed or appened * to the hash. hash[optional] is by default appened to the hash * unless the param prefix[optional] is set to prefix[true]. * * @param start[optional] * @param end[optional] * @param hash[optional] * @param prefix bool[optional] * * @return string a unique string max[32] character */ function hash_gen($start = null, $end = 0, $hash = FALSE, $prefix = FALSE){ // start IS set NO hash if( isset($start, $end) && ($hash == FALSE) ){ $md_hash = substr(md5(uniqid(rand(), true)), $start, $end); $new_hash = $md_hash; }else //start IS set WITH hash NOT prefixing if( isset($start, $end) && ($hash != FALSE) && ($prefix == FALSE) ){ $md_hash = substr(md5(uniqid(rand(), true)), $start, $end); $new_hash = $md_hash.$hash; }else //start NOT set WITH hash NOT prefixing if( !isset($start, $end) && ($hash != FALSE) && ($prefix == FALSE) ){ $md_hash = md5(uniqid(rand(), true)); $new_hash = $md_hash.$hash; }else //start IS set WITH hash IS prefixing if( isset($start, $end) && ($hash != FALSE) && ($prefix == TRUE) ){ $md_hash = substr(md5(uniqid(rand(), true)), $start, $end); $new_hash = $hash.$md_hash; }else //start NOT set WITH hash IS prefixing if( !isset($start, $end) && ($hash != FALSE) && ($prefix == TRUE) ){ $md_hash = md5(uniqid(rand(), true)); $new_hash = $hash.$md_hash; }else{ $new_hash = md5(uniqid(rand(), true)); } return $new_hash; }


La respuesta aceptada sugiere usar un hash del uniqid() de PHP uniqid() . La documentación para uniqid advierte explícitamente que no crea "cadenas aleatorias ni impredecibles", y establece enfáticamente que " Esta función no debe utilizarse con fines de seguridad " .

Si existe alguna duda sobre la posibilidad de que se adivine un código de confirmación (y ese es el objetivo de emitir un código), puede utilizar un generador más aleatorio como openssl_random_pseudo_bytes() . A continuación, puede usar bin2hex() para convertirlo en un buen alfanumérico. Lo siguiente se parece a la salida de la respuesta de John Conde, pero es (supuestamente) más aleatorio y menos adivinable:

// generate a 16 byte random hex string $random_hash = bin2hex(openssl_random_pseudo_bytes(16))

Anexo tardío: como señala Oleg Abrazhaev, si quiere asegurarse de que su sistema sea realmente capaz de generar valores aleatorios criptográficamente fuertes en el tiempo de ejecución, openssl_random_pseudo_bytes acepta una referencia a un bool para informar esto. Código de phpinspectionsea documentos :

$random = openssl_random_pseudo_bytes(32, $isSourceStrong); if (false === $isSourceStrong || false === $random) { throw new /RuntimeException(''IV generation failed''); }

Luego use el valor aleatorio generado como antes:

$random_hash = bin2hex($random)


private function generateCodeSecurity() { list($usec, $sec) = explode(" ", microtime()); $micro = usec + $sec; $hoy = date("Y-m-d"); $str = str_replace(''-'','''',$hoy); return rand($str, $micro); }

Con este pequeño código, puede generar un número aleatorio, con un rango de 7 a 11 números.

Usando las funciones de php:

Rand (); Microtime () $hoy = date("Y-m-d"); $str = str_replace(''-'','''',$hoy); echo $str; result date: 20170217 list($usec, $sec) = explode(" ", microtime()); $micro = usec + $sec; echo $micro; result micro varaible: 1487340849

Pasar parámetros en esta función: rand ();

rand($str, $micro);

y volver;

ejemplo:

list($usec, $sec) = explode(" ", microtime()); $micro = usec + $sec; $hoy = date("Y-m-d"); $str = str_replace(''-'','''',$hoy); $finalresult = rand($str, $micro); echo $finalresult;

resultado: 1297793555

Creo que es difícil repetir este número, por la razón de que nunca será el mismo día, ni la misma hora, ni los mismos milisegundos de tiempo.


$random_hash = md5(uniqid(rand(), true));

Serán 32 caracteres alfanuméricos largos y únicos. Si desea que sea más corto solo use substr ():

$random_hash = substr(md5(uniqid(rand(), true)), 16, 16); // 16 characters long

Los métodos alternativos para generar datos aleatorios incluyen:

$random_hash = md5(openssl_random_pseudo_bytes(32)); $random_hash = md5(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); // New in PHP7 $random_hash = bin2hex(random_bytes(32));