Pregunta

Después de suscribirse el usuario de correo electrónico a mi página web. Mi sitio web generará una confirmación por correo electrónico y enviar a ellos. En el contenido del correo electrónico, i necesidad de incluir la clave de activación, algo como:

www.domain.com/activate.php?key=$generatedKey

¿Cómo se genera la clave? utilizando sha1 ($ email) ??

Después de generar la clave, lo guarde en la base de datos, de modo que cuando el usuario haga clic en el enlace que puedo verificado con la base de datos ?? Soy nuevo en ella, por favor avise .. Necesito un script Confirmación ..

¿Fue útil?

Solución

En lo personal, solo utilizo una combinación de cosas como:

$generatedKey = sha1(mt_rand(10000,99999).time().$email);

La posibilidad de colisión es pequeña, pero recomiendo la comprobación de su primera base de datos antes de enviarlo (está utilizando restricciones UNIQUE una manera fácil).

Otros consejos

Es, básicamente, tiene algunas opciones:

1) Crear un único identificador único que es aparentemente al azar y lo almacenan en su base de datos con la que corresponde al nombre de usuario es

2) Generar una contraseña aleatoria e incluir la identificación de usuario y contraseña en el enlace y almacenar la contraseña en la base de datos

3) Utilizar una función unidireccional hashing (md5, sah1, etc) y un identificador secreto para encriptar el identificador de usuario. Usted no tiene que almacenar el identificador de usuario cifrado en su base de datos.

La opción 1 es difícil porque hay que preocuparse por el control de la base de datos para ver si la clave ya existe. Sin embargo, es bueno que la URL no contiene el nombre de usuario está activada.

Si ya se va a utilizar algún tipo de base de datos para almacenar la información del usuario (probablemente una contraseña como mínimo) en el futuro, usted podría ir con la opción 2. No se necesita mucho para agregar otra columna a la base de datos. Cuando se envía el correo electrónico, guardar el nombre de usuario y algo así como $ clave = sha1 (rand (1, 99999). $ Nombre de usuario) en otra columna para la fila que contiene el nombre de usuario. Después haga que su mirada enlace tal que así: http://you.com/activation.php?user= $ nombre de usuario y clave de clave = $. En activation.php comprobar para ver si la clave es igual al valor almacenado en la base de datos.

Si desea utilizar menos espacio de almacenamiento en su base de datos, la opción 3 funcionará. Se puede usar algo como $ clave = sha1 ($ mysecret. $ Nombre de usuario) como el identificador secreto. Usar algo extraño que sólo usted sabe como $ mysecret como 'aaafj_my_secret_adfaf'. Utilice el mismo tipo de URL como en la opción 2. Sin embargo, debido a que puede generar $ clave basada sólo en $ nombre de usuario, no es necesario almacenarlo. Así que cuando se está procesando en activation.php, sólo comprobar para ver si sha1 ($ mysecret. $ _GET [nombre de usuario]) == $ _GET [clave]. Si lo hace, usted sabe que tiene el usuario correcto. En teoría, con suficientes registros, alguien podría calcular su valor por $ mysecret y generar las claves de activación también. Sin embargo, seguramente notará los mil millones o más de las inscripciones que llevaría a cabo antes de que pudieran comenzar a calcular lo que es. El número de activaciones requeridas se basa en el tamaño de la clave de la función hash. Utilizar SHA1 (160 bits) vs MD5 (128 bits) para que sea más difícil de adivinar su valor mysecret $.

$guid=md5(uniqid(mt_rand(), true));

Si va a almacenar la cadena de activación en la base de datos y comprobar más tarde, no es necesario un hash en absoluto!

Sólo tiene una cadena aleatoria larga. Se puede generar sin embargo que usted desea, sólo que sea larga. De hecho, lo ideal es que tenga nada en absoluto hacer hacer con el correo electrónico o nombre de usuario.

Esto debe hacerlo, sin embargo se puede mejorar mediante la adición de un poco de sal, ejemplo:

$key = sha1($email . 'doYouLikeSauce');

Otro enfoque es sólo para generar una contraseña aleatoria y enviarlo por correo electrónico.

$code = md5($_POST['username'] . microtime()); 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top