Générer une clé Unique
Quelle est la meilleure façon de générer une clé unique, qui ne peut pas être facilement devinés?
je voudrais créer une clé unique pour l'activation du compte et des fins de référence, qui comprend un checksum pour aider à empêcher les utilisateurs de deviner facilement d'autres utilisateurs activation ou des clés de référence.
aussi, en PHP est-il possible de créer votre propre clé de session? Dans l'affirmative, comment le rendriez-vous unique?
Toute aide est grandement appréciée.
7 réponses
Vous pouvez utiliser uniqid pour générer des Identifiants uniques. Regardez aussi les commentaires pour les implémentations PHP de la génération UUID (universally unique identifier).
C'est ce que j'utilise pour la clé uniq en php:
$activation = md5(uniqid(rand(), true));
il suffit D'utiliser la fonction build-in de PHP uniqid()
. voir manuel PHP.
D'autres réponses ont déjà couvert le sujet de la création d'un (pseudo) ID unique, donc je ne couvre que la façon de définir votre propre id de session:
l'id de session en PHP est généré automatiquement, mais vous pouvez définir le vôtre. Voir session_id()
comment le faire.
Exemplaire, il fonctionne comme ceci:
$mySessionId = generate_my_session_id();
$oldId = session_id($mySessionId);
session_start(); // session must start _after_ setting the id.
j'utilise ce script pour générer des mots de passe au hasard, vous changez quelques choses autour et il fonctionnera assez bien pour ce que vous voulez.
function generatePassword ($length) {
$possible = "0123456789abcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRESTUVWXYZ_"; // allowed chars in the password
if ($length == "" OR !is_numeric($lengh)){
$length = 8;
}
srand(make_seed());
$i = 0;
$password = "";
while ($i < $length) {
$char = substr($possible, rand(0, strlen($possible)-1), 1);
if (!strstr($password, $char)) {
$password .= $char;
$i++;
}
}
return $password;
}
et pour votre propre touche de session c'est assez simple
start_session();
$_SESSION['NewSessionVariable']=$VariableToSet;
Vous pouvez utiliser cette fonction que j'ai écrit parfois plus tôt..
function generateToken($type = null) {
if($type) {
return '<input type="hidden" name="token_id" value="'.$_SESSION['token_id'].'">';
} else {
if(!isset($_SESSION['token_id'])) {
$token_id = md5(substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 10));
$_SESSION['token_id'] = $token_id;
return $_SESSION['token_id'];
}
return $_SESSION['token_id'];
}
}