Question

Après l'utilisateur s'abonner e-mail sur mon site. Mon site génère une confirmation par courriel et leur envoyer. Dans le contenu e-mail, je dois inclure la clé d'activation, quelque chose comme:

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

Comment générer la clé? en utilisant SHA1 ($ email) ??

Après générer la clé, je le stocker dans la base de données, de sorte que lorsque l'utilisateur cliquez sur le lien que je peux le vérifier avec la base de données ?? Je suis nouveau pour elle, s'il vous plaît conseiller .. je besoin d'un script de confirmation par courriel ..

Était-ce utile?

La solution

Personnellement, juste que j'utilise une combinaison de choses comme:

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

La chance de collision est faible, mais je vous conseille d'abord vérifier votre base de données avant de l'envoyer (en utilisant UNIQUE est un moyen facile).

Autres conseils

Vous avez essentiellement quelques options:

1) Créer un identifiant unique qui est apparemment aléatoire et le stocker dans votre base de données avec les noms d'utilisateur correspond à

2) Générer un mot de passe aléatoire et inclure l'ID d'utilisateur et mot de passe dans le lien et enregistrer le mot de passe dans la base de données

3) Utiliser une fonction de hachage à sens unique (md5 sah1, etc) et un identifiant secret pour chiffrer l'identifiant d'utilisateur. Vous ne devez pas stocker l'identifiant d'utilisateur crypté dans votre base de données.

L'option 1 est difficile parce que vous avez à vous soucier de vérifier la base de données pour voir si la clé existe déjà. Cependant, il est bien que l'URL ne contient pas le nom d'utilisateur activé.

Si vous êtes déjà allez utiliser une sorte de base de données pour stocker à l'avenir les informations utilisateur (probablement un mot de passe au minimum), vous pouvez aller avec l'option 2. Il ne prend pas beaucoup de choses à ajouter une colonne à votre base de données. Lors de l'envoi du courrier électronique, enregistrez le nom d'utilisateur et quelque chose comme $ key = SHA1 (rand (1, 99999). $ Username) dans une autre colonne pour la ligne qui contient le nom d'utilisateur. Alors votre look lien comme celui-ci: http://you.com/activation.php?user= $ username & key = $ key. En activation.php vous vérifiez si la clé est égale à la valeur stockée dans la base de données.

Si vous souhaitez utiliser moins d'espace de stockage dans votre base de données, l'option 3 fonctionnera. Vous pouvez utiliser quelque chose comme $ key = SHA1 (mysecret $. $ Username) comme identifiant secret. Utilisez quelque chose d'étrange que vous seul savez que mysecret $ comme « aaafj_my_secret_adfaf ». Utilisez le même type d'URL comme dans l'option 2. Toutefois, parce que vous pouvez générer $ clé basée uniquement sur le nom d'utilisateur de $, vous n'avez pas besoin de le stocker. Ainsi, lorsque vous traitez dans activation.php, vérifiez juste pour voir si SHA1 (mYsEcret $. $ _GET [nom d'utilisateur]) == $ _GET [key]. Si oui, vous savez que vous avez le bon utilisateur. En théorie, avec les inscriptions assez, quelqu'un pourrait déterminer votre valeur pour mysecret $ et générer les clés d'activation aussi. Cependant, vous remarquerez sans doute les milliards ou plus d'inscriptions qu'il prendrait avant de pouvoir commencer à calculer ce qu'il est. Le nombre d'activations requis est basé sur la taille de la clé de la fonction de hachage. Utilisez SHA1 (160 bits) vs md5 (128 bits) pour le rendre plus difficile à deviner votre valeur $ mysecret.

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

Si vous stockez la chaîne d'activation dans la base de données et la vérification ultérieure, vous n'avez pas besoin d'un hachage du tout!

Vous avez juste besoin d'une longue chaîne aléatoire. Vous pouvez cependant générer ce que vous voulez, juste faire longtemps. En fait, il devrait idéalement avoir rien ne faire avec l'e-mail ou nom d'utilisateur.

Cela devrait le faire, vous pouvez cependant l'améliorer en ajoutant un peu de sel, par exemple:

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

Autre approche est juste pour générer un mot de passe aléatoire et l'envoyer par e-mail.

$code = md5($_POST['username'] . microtime()); 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top