php - sirve - Generar una clave única
php tutorial (7)
Esto es lo que uso para la clave uniq en php:
$activation = md5(uniqid(rand(), true));
¿Cuál es la mejor manera de generar una clave única, que no se puede adivinar fácilmente?
Me gustaría crear una clave única tanto para la activación de la cuenta como para fines de referencia, que incluye una suma de comprobación para ayudar a evitar que los usuarios adivinen fácilmente las claves de activación o referencia de otros usuarios.
Además, en PHP es posible crear tu propia clave de sesión? Si es así, ¿cómo harías esto único?
Cualquier ayuda es muy apreciada.
No lo compliques demasiado
$key = md5(microtime().rand());
Otras respuestas ya cubrieron el tema sobre la creación de un (pseudo) ID único, por lo que solo se explica cómo configurar su propio ID de sesión:
El identificador de sesión en PHP se genera automáticamente, pero puede establecer el suyo propio. Ver session_id()
cómo hacerlo.
Ejemplar funciona así:
$mySessionId = generate_my_session_id();
$oldId = session_id($mySessionId);
session_start(); // session must start _after_ setting the id.
Puede utilizar uniqid para generar ID únicas. Mire los comentarios para las implementaciones de PHP de la generación de UUID (identificador único universal) también.
Puedes usar esta función que escribí algunas veces ...
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''];
}
}
Simplemente use la función uniqid()
PHP uniqid()
. uniqid .
Utilizo este script para generar contraseñas al azar, cambias un par de cosas y funcionará bastante bien para lo que quieras.
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;
}
y para su propia clave de sesión es bastante simple
start_session();
$_SESSION[''NewSessionVariable'']=$VariableToSet;