Ответ 1
Не слишком усложняйте его:
$key = md5(microtime().rand());
Каков наилучший способ создания уникального ключа, о котором нельзя легко догадаться?
Я хотел бы создать уникальный ключ как для активации учетной записи, так и для направления, включая контрольную сумму, чтобы помочь пользователям легко догадаться о активах других пользователей или реферальных ключах.
Кроме того, в PHP можно создать собственный ключ сеанса? Если да, то как бы вы сделали это уникальным?
Любая помощь очень ценится.
Не слишком усложняйте его:
$key = md5(microtime().rand());
Вы можете использовать uniqid для создания уникальных идентификаторов. Посмотрите на комментарии для PHP-реализации поколения UUID (универсально уникальный идентификатор).
Это то, что я использую для ключа uniq в php:
$activation = md5(uniqid(rand(), true));
Просто используйте встроенную функцию PHP uniqid()
. См. руководство по PHP.
Другие ответы уже затронули тему создания (псевдо) уникального идентификатора, поэтому я расскажу только, как установить свой собственный идентификатор сеанса:
Идентификатор сеанса в PHP автоматически генерируется, но вы можете установить свой собственный. См. session_id()
, как это сделать.
Пример: он работает следующим образом:
$mySessionId = generate_my_session_id();
$oldId = session_id($mySessionId);
session_start(); // session must start _after_ setting the id.
Я использую этот script для случайного создания паролей, вы меняете пару вещей вокруг, и это будет хорошо работать для того, что вы хотите.
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;
}
и для вашего собственного сеансового ключа его довольно простой
start_session();
$_SESSION['NewSessionVariable']=$VariableToSet;
Вы можете использовать эту функцию, которую я написал иногда назад.
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'];
}
}