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.

19
php
demandé sur user826855 2011-07-03 21:04:44

7 réponses

Ne pas trop compliquer:

$key = md5(microtime().rand());
45
répondu AlienWebguy 2011-07-03 17:44:02

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).

12
répondu Dan Grossman 2011-07-03 17:08:29

C'est ce que j'utilise pour la clé uniq en php:

$activation = md5(uniqid(rand(), true));
8
répondu Amirshk 2011-07-03 17:08:59

il suffit D'utiliser la fonction build-in de PHP uniqid(). voir manuel PHP.

3
répondu crysxd 2015-11-15 11:08:23

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.
1
répondu hakre 2011-07-03 17:16:52

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;
0
répondu rackemup420 2011-07-03 17:10:58

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'];
  }
}
0
répondu Uti Mac 2016-12-07 04:10:47