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