@crack_user

Как решить проблему с созданием куки и возможные ошибки с авторизацией?

Код вроде бы работает, выводит нужный текст под нужными ему условиями, но увы, почему-то куки не работает, как бы как я понял и работает, но видимо удаляется, прописал - var_dump(setcookie(блабла)); и выводило значение true, и как я понял это означает, что куки было создано, но в F12 - Cookies я не нашел его, а также при выводе нужного мне куки - выводит NULL. В файле авторизации проверял условие на пустой куки, но также куки считался пустым.
var_dump($_COOKIE['hash']); // Вывод NULL, делаю тоже самое и с остальными куки
    if(!isset($_COOKIE['verify'])) :

    <?php else:?> 
    <p class="succes">Вы успешно авторизированы</p>
  <?php endif;?>


Код проверки авторизации -
<?php
require_once('bd.php');
require_once('function.php');
if(isset($_POST['submit'])) {
    $stmt = $pdo->prepare("SELECT * FROM `users` WHERE `login` = ? LIMIT 1");
    $stmt->execute([$_POST['login']]);
    $result = $stmt->fetch(PDO::FETCH_ASSOC);

    if(password_verify($_POST['password'], $result['password'])) {
        $hash = md5(generateCode(10));
        $stmt = $pdo->prepare("UPDATE `users` SET `hash` = ? WHERE `login` = ?");
        $stmt->execute([$hash,$_POST['login']]);
        setcookie("ID", $result['ID'], time()+60*60*24*30);
        setcookie("hash", $hash, time()+60*60*24*30);
        // Участок кода, что снизу был изначально в отдельном файле, но после решил попробовать его закинуть сюда
       // Вроде бы работает, если всё же лучше закинуть эту проверку в отдельный файл (вроде как так должно быть 
    // правильнее т.к куки как я понимаю еще мог не быть создан )
    // если действительно так и надо - напишите, заранее спасибо.
        if(($result['hash'] !== $_COOKIE['hash']) || ($result['ID'] !== $_COOKIE['ID'])) {

            setcookie("id", "", time() - 3600*24*30*12, "/");
    
            setcookie("hash", "", time() - 3600*24*30*12, "/");
    
            echo '<li class="warning">Хм, что-то не получилось</li>';
        }
    
        else
    
        {
            setcookie("verify", "1", time()+60*60*24*30);
            echo '1';
    
        }
    } else {
        echo '<li class="warning">Вы неправильно ввели логин или пароль</li>';
    }
}

Как я уже упомянул выше, при правильном вводе логина и пароля, выводится "1" (echo '1';) и создается куки "verify", но увы, куки почему-то не хочет сохранятся. Заранее спасибо за помощь.

Также возможно, кто-то сможет подсказать по поводу защиты авторизации и самой авторизации в моем исполнение, ну или что лучше к ней применять и какие есть возможные траблы в текущей авторизации, копался копался в гугле по поводу защиты (не могу просто так оставить его, осознавая, что авторизация может быть плохой), находился всякие другие решения, но везде они либо схожи с текущим либо с другой реализацией (позже буду смотреть и на другие варианты) и поэтому и просьба в этом плане как-то что-то подсказать, может какие-то методы стоит другие применить и тд.
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
"В F12" надо смотреть не Cookie, а вкладку Network. Все куки, которые ставит сервер, пишутся в ответе сервера на запрос.
Именно там надо смотреть, что за куки приходят.
И там же, в запросах браузера, смотреть - какие куки он отправляет.

В целом код какой-то странный, в части проверок под длинным комментарием.
получается, что при первом логине, когда $result['hash'] пустой, он должен стирать все куки.
при этом код удаления ставит куку id, а код проверки использует куку ID

Для начала я бы проверил работу кук без всякой авторизации, просто выставлял и проверял наличие. А потом постепенно добавлял бы код. В общем, обычная отладка.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы