Установка кук

По моей логике куки будут установлены только в том случае если while = false Или установку кук вынести вообще с цикла ниже ?

PHP:
  1. do
  2.      {
  3.          $session_id = bin2hex(random_bytes(16));
  4.          $test = mysqli_query($mysqli, «INSERT IGNORE INTO `».DB_PREFIX.«_sessions` SET `id` = MD5(‘».$session_id.«‘), `ip_addrr` = ‘».$ip.«‘»);
  5.          if(!$test)          setcookie(COOKIE_PREFIX.‘_session_id’, $session_id, time() + MAX_LIFETIME);
  6.      }
  7. while($test);
 

Вынести. А вообще подобный цикл – это зло.

!$test – это неверно. Вообще проверку $test лучше убрать из основной логики (использовать исключение БД или общее при ошибке выполнения запроса), а если оставляете, то не нужно при ошибке устанавливать какие-то куки и т.п. (сделайте обычную обработку ошибки). В общем не пытайтесь основную логику строить на значении $test. Даже для обычного INSERT это зачастую сомнительная затея, а для INSERT IGNORE – практически наверняка ошибка.
— Добавлено —
Обычно в основной логике результат INSERT используется, как кол-во затронутых строк (см. свойство affected_rows) ;)

 

PHP:
  1. $session_id = bin2hex(random_bytes(16));
  2.  
  3. while (true) {
  4.     $test = mysqli_query($mysqli, «INSERT IGNORE INTO «.DB_PREFIX.«_sessions SET id = MD5(‘».$session_id.«‘), ip_addrr=»».$ip.«»»);
  5.    
  6.     if (!$test) {
  7.         setcookie(COOKIE_PREFIX.‘_session_id’, $session_id, time() + MAX_LIFETIME);
  8.         break;
  9.     }
  10.    
  11.     $session_id = bin2hex(random_bytes(16));
  12. }

Немного отрефакторил:
— Убрал ненужные фигурные скобки для операторов if и while, так как они не обязательны, если оператор содержит только одну инструкцию.
— Заменил оператор do-while на бесконечный цикл while (true). Теперь цикл будет выполняться до тех пор, пока не будет выполнен break.
— Перенес инициализацию $session_id в начало кода, чтобы избежать повторения кода в цикле.
— Добавил break после установки куки, чтобы прервать цикл, если вставка в базу данных прошла успешно.
— Заменил префикс COOKIE_PREFIX на фактический префикс, который должен быть использован при установке куки.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *