Ver Mensaje Individual
  #3 (permalink)  
Antiguo 16/06/2006, 03:36
raul123
 
Fecha de Ingreso: septiembre-2005
Mensajes: 94
Antigüedad: 19 años, 1 mes
Puntos: 0
Hola amigos,
Cita:
Pues puedes meter algo asi:
"Gracias por su registro, para activar su cuenta pulse el siguiente enlace:
http://www.tudominio.com/paginaconfirmacion.php?id=X"

siendo X el id del susodicho usuario..
Me parece que, el problema de eso es que otro usuario podría confirmar tu cuenta simplemente conociendo tu id. Claro, ahora depende de qué es la id;si es el nombre d usuario sería demasiado sencillo suplantar a alguien; lo que te voy a poner genera una id única para cada usuario, que será función de su dirección ip y otros parámetros difíciles de suplantar.

Tienes dos opciones:

En ambas opciones, necesitarás un campo extra en la tabla usuario, que diga si se ha validado el mail o no.

1.- Además, deberás crear otro campo para guardar la idunica.

2.- Yo lo implementé en una tabla aparte, llamada usuarios_temp, en la que guardo el login del usuario, su clave única, y la fecha de cuando se registró (esto es por si quieres eliminar usuarios que no hayan validado a las X horas).

A continuación, cuando el usuario introduzca sus datos en el form. de registro , los guardas en tu base de datos, rellenando el campo de idunica con esta función:

funcion para generar una idunica
Código PHP:
//función para el mail
function getRealIP()
{
   if( 
$_SERVER['HTTP_X_FORWARDED_FOR'] != '' )
   {
      
$client_ip =
         ( !empty(
$_SERVER['REMOTE_ADDR']) ) ?
            
$_SERVER['REMOTE_ADDR']
            :
            ( ( !empty(
$_ENV['REMOTE_ADDR']) ) ?
               
$_ENV['REMOTE_ADDR']
               :
               
"unknown" );
   
      
// los proxys van añadiendo al final de esta cabecera
      // las direcciones ip que van "ocultando". Para localizar la ip real
      // del usuario se comienza a mirar por el principio hasta encontrar
      // una dirección ip que no sea del rango privado. En caso de no
      // encontrarse ninguna se toma como valor el REMOTE_ADDR
   
      
$entries split('[, ]'$_SERVER['HTTP_X_FORWARDED_FOR']);
   
      
reset($entries);
      while (list(, 
$entry) = each($entries))
      {
         
$entry trim($entry);
         if ( 
preg_match("/^([0-9]+.[0-9]+.[0-9]+.[0-9]+)/"$entry$ip_list) )
         {
            
// http://www.faqs.org/rfcs/rfc1918.html
            
$private_ip = array(
                  
'/^0./',
                  
'/^127.0.0.1/',
                  
'/^192.168..*/',
                  
'/^172.((1[6-9])|(2[0-9])|(3[0-1]))..*/',
                  
'/^10..*/');
   
            
$found_ip preg_replace($private_ip$client_ip$ip_list[1]);
   
            if (
$client_ip != $found_ip)
            {
               
$client_ip $found_ip;
               break;
            }
         }
      }
   }
   else
   {
      
$client_ip =
         ( !empty(
$_SERVER['REMOTE_ADDR']) ) ?
            
$_SERVER['REMOTE_ADDR']
            :
            ( ( !empty(
$_ENV['REMOTE_ADDR']) ) ?
               
$_ENV['REMOTE_ADDR']
               :
               
"unknown" );
   }
   
   return 
$client_ip;
   
}
//getRealIP() 
En el mail que le mandes a tu usuario, debería haber un link parecido a esto:

http://www.paginaconfirmacion.php?idunica=xxxxxxxxx

En paginaconfirmacion.php recoges idunica con Get y compruebas que existe en tu base de datos esa idunica. Ya sólo tienes que validar el usuario al que pertenece (poniendo el campo de validación a 1 o como lo hagas).

Espero que te sirva tanto como me sirvió a mí.

Un saludo!!