Тут в одном топике недавно вскольз упоминалось что нельзя только лишь на основании куки давать или не давать пользователю доступ к тем или иным разделам ресурса. Как я вижу управление доступом сейчас: 1)Пользователь у нас уже зареган. 2)Далее он входит и ставит галочку "Запомнить меня". Ему летит кука например с логином. 3)Обращается к разделу сайта для которого требуются привелегии. 4)Где нибудь в контроллере(а может это будет в мидлвэрэ) вытягиваем пользователя из базы, его роль(например он у нас админ) 5) Если для этой роли (админ) его можно пустить в нужный раздел сайта (админка) пускаем, если нет редирект. Пункты 4 и 5 повторяются для каждого запроса, если для отображения нужны привилегии. Так это делается правильно ? --- Добавлено --- Удивительно, а сейчас у меня кнопка "редактировать" есть
Надо логин пользователя писать только в сессию. Куки сессии это идентификатор, очень длинный, чтобы его не подобрали. Только кто имеет этот идентификатор в куки и по нему найден файл в папке с сессиями, то значит этот пользователь входил на сайт. Если просто в куки записать логин, то можно его будет поменять на логин админа или заменить логином другого пользователя.
Идентификационну куку защищают подписью. Например как устроена кука WordPress: "username|expiration|token|hmac" По логину из таблицы users вытягивается запись пользователя. Затем token, username, expiration, соль из конфига и пароль из базы пропускаются через хеш-функцию и сравниваются с hmac. Expiration здесь присутствует чтобы нельзя было предъявить старое однажды украденное значение. Если expiration > time(), авторизация не состоится. Если ручками изменишь expiratiuon, то хеш hmac станет неверным. Если заменить логин на административный — опять же проверочный хеш не сойдется. При этом зная куку вычислить пароль тоже не получится, ибо не все параметры известны. Теоретически можно зная свой пароль брутфорсом подобрать значение секретной соли, но это весьма трудоёмкая процедура, на простом компе замучишся считать. --- Добавлено --- В сессии тоже часто хранят данные. Но сложно реализовать "запомнить меня". Потому что сессия не может жить долго! Всё равно придется заводить какую-то долгоживущую куку по которой восстанавливается сессионный user_id. Я считаю это лишней сложностью. Моя упрощенная проверка куки WP: https://gist.github.com/artoodetoo/0d8cd9be2c67483976d1