Обучение/Помощь новичкам | Рехэш
Тема закрыта 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) ________
посл. ред. 29.07.2023 в 00:22; всего 13 раз(а); by SNEG
Для создания нового хэша токена, если уже существует такой хэш в базе данных, вы можете использовать следующий подход: Генерация нового токена: Если хэш уже существует в базе данных, значит, токен, из которого был создан хэш, уже был использован. Поэтому вам следует сгенерировать новый токен. Повторное хэширование нового токена: После генерации нового токена вы можете повторно применить тот же процесс хэширования, который был использован при создании исходного хэша. Это означает, что вы снова примените функцию 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