Loading...
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 к новому токену. Проверка уникальности нового хэша: После получения нового хэша, вы можете выполнить проверку, существует ли уже такой хэш в базе данных. Если новый хэш уже существует, повторите процесс с генерацией нового токена и повторным хэшированием до тех пор, пока не будет сгенерирован уникальный хэш. Вот пример, как это может быть реализовано в вашем коде:
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)); }  // Теперь у вас есть новый уникальный токен и хэш для него   
Этот код будет генерировать новый уникальный токен и хэш для него до тех пор, пока новый хэш не станет уникальным и не сможет быть найден в базе данных.
MARAZM , немного ознакомился с примером, может в do-while правильно будет обернуть, в тело генерацию ключей а в условии проверить или > 0 ?
________
посл. ред. 29.07.2023 в 13:56; всего 1 раз(а); by SNEG
Онлайн: 3
Время:
Gen. 0.0657
(c) Bym.Guru 2010-2026