Обучение/Помощь новичкам | Рехэш
Тема закрыта by
SNEG
php
//Создал токен
$token = keyGen(32);
//Создал хэш
$_hash = crypt($token, '$2y$15$'.substr(str_shuffle($token), 0, 22));
if(mysqli_num_rows(mysqli_query($mysqli, "SELECT `id` FROM `sessions` WHERE `token` = '{$_hash}'")) > 0)Как реализовать создание нового хэша токена если такой уже существует в бд? С таким условием if у меня не получилось.
________
посл. ред. 29.07.2023 в 00:22; всего 13 раз(а); by SNEG
Для создания нового хэша токена, если уже существует такой хэш в базе данных, вы можете использовать следующий подход:
Генерация нового токена:
Если хэш уже существует в базе данных, значит, токен, из которого был создан хэш, уже был использован. Поэтому вам следует сгенерировать новый токен.
Повторное хэширование нового токена:
После генерации нового токена вы можете повторно применить тот же процесс хэширования, который был использован при создании исходного хэша. Это означает, что вы снова примените функцию crypt к новому токену.
Проверка уникальности нового хэша:
После получения нового хэша, вы можете выполнить проверку, существует ли уже такой хэш в базе данных. Если новый хэш уже существует, повторите процесс с генерацией нового токена и повторным хэшированием до тех пор, пока не будет сгенерирован уникальный хэш.
Вот пример, как это может быть реализовано в вашем коде:
Этот код будет генерировать новый уникальный токен и хэш для него до тех пор, пока новый хэш не станет уникальным и не сможет быть найден в базе данных.
Генерация нового токена:
Если хэш уже существует в базе данных, значит, токен, из которого был создан хэш, уже был использован. Поэтому вам следует сгенерировать новый токен.
Повторное хэширование нового токена:
После генерации нового токена вы можете повторно применить тот же процесс хэширования, который был использован при создании исходного хэша. Это означает, что вы снова примените функцию crypt к новому токену.
Проверка уникальности нового хэша:
После получения нового хэша, вы можете выполнить проверку, существует ли уже такой хэш в базе данных. Если новый хэш уже существует, повторите процесс с генерацией нового токена и повторным хэшированием до тех пор, пока не будет сгенерирован уникальный хэш.
Вот пример, как это может быть реализовано в вашем коде:
php
// Функция для генерации нового уникального токена
function generateUniqueToken() {
$characters = '0123456789abcdefghijklmnopqrstuvwxyz'; // включите все символы, которые хотите использовать для токена
$length = 20; // укажите желаемую длину токена
$token = '';
for ($i = 0; $i < $length; $i++) {
$token .= $characters[rand(0, strlen($characters) - 1)];
}
return $token;
}
// Генерация нового токена
$newToken = generateUniqueToken();
// Создание нового хэша из нового токена
$newHash = crypt($newToken, '$2y$15$' . substr(str_shuffle($newToken), 0, 22));
// Проверка уникальности нового хэша
while (mysqli_num_rows(mysqli_query($mysqli, "SELECT `id` FROM `sessions` WHERE `token` = '{$newHash}'")) > 0) {
// Если хэш уже существует, генерируем новый токен и хэш повторно
$newToken = generateUniqueToken();
$newHash = crypt($newToken, '$2y$15$' . substr(str_shuffle($newToken), 0, 22));
}
// Теперь у вас есть новый уникальный токен и хэш для негоЭтот код будет генерировать новый уникальный токен и хэш для него до тех пор, пока новый хэш не станет уникальным и не сможет быть найден в базе данных.
________
посл. ред. 29.07.2023 в 13:56; всего 1 раз(а); by SNEG