Нинасколько не защищены. Любой стиллер, даже за 10$ имеет функцию стыривания кукисов.
Не совсем понятно зачем такие костыли с ключом из кода, который придет на почту. Разве нельзя просто генерить рандомные байты соответствующей функция в php?
Необратимое шифрование - это не шифрование, а хеширование.
Зачем лочить акк из-за 10 неверных кодов? Тогда любой школьник, чухнувший это сможет забанить любой акк на твоем сайте. Как этого избежать? 1. Не давать информации о том зареган ли юзер с таким мылом или нет. 2. Вешать капчу на ввод кода. Это практически полностью защищает от автоподбора. А лучше делать код не только из 6 цифр. Можно увеличить его длину. Хотя бы до 8 цифр. А еще лучше писать туда и буквы тоже.
Чтобы избежать кражу кукисов нужно сделать пару простых вещей.
1. Начать использовать хотя бы самописное подобие нормальной системы токенов. Посмотри на JWT. Там есть refresh и access токен. Время жизни access токена нужно ставить небольшое. Лучше чтобы это было не более 5 минут. Так как логи со стиллеров и прочей дряни чекаются не сразу.
2. Хранить токены не только в куки. Есть еще и localstorage. Но тут уже кто на что горазд. Кто-то делает не 2 токена, а 3 или больше. Рассмотрим пример с 4 токенами. 2 токена на refresh и 2 токена на access. Один из пары храниться в куки на httponly, а второй токен хранится в localstorage. При операциях предъявляются оба токена. Таким образом стыриванием только куков злоумышленник ничего не добьется. А так же желательно смотреть не только на токены, но еще и на другие детали. Например, user-agent и IP-адрес. Резкая смена того и другого в одной сессии довольно странно. Да, это легко обходится, но не в каждом вредоносном ПО такое предусмотренно. Не каждый рядовой ратник способен организовать какое-то подобие прокси через комп жертвы.
Вообще эта тема довольно непростая и лучше придерживаться то, что уже было придумано и успешно используется.
Почитай про JWT. Можешь посмотреть вот это
https://deworker.pro/edu/series/http-basics/authen...
Также можно использовать уже готовые решения в фреймворках на твоем языке.