а по поводу того, что я сказал выше, как думаешь?там много чего, что конкретно?
Как я понял лучшим решением является доп. таблица, в которой будут id пользователя, hash, и дата создания этого ключа доступа, чтобы их потом удалятьдостаточно поле в таблице пользователей, дополнительная таблица нужна только если вы хотите чтобы пользователь имел возможность запоминать себя с нескольких разных устройств. Дата опциональна, так как галочка "запомнить меня" подразумевает "навсегда", в крайнем случае можно задать время жизни авторизационной куки.
об этом решении мне рассказал @DevManподозреваю что имел он в виду не сессионную куку, и соответственно некоторую настройку сервера на время жизни сессионных файлов. По мне не лучшее решение, так как требует некоторых телодвижений по настройке сервера, что не всегда возможно. Да и минусы использования устаревших сессий я уже описал.
а почему нельзя задать сессии name с этим ключом, а потом просто получить сессию по ключу?
if($_SESSION['user']['is_logged'] == true){...}
if ($user['password'] == $_POST['password']) {
session_id($user['id']);
session_start(); // убрать, только в начале нужно
и как я положу в массив $_SESSION['user'] пользователя, если при его получении там есть пароль, или мне лучше создать новый массив без пароля и засунуть туда?
тут можно вытащить нужные поля, не только id,password и тд, и из них выбрать что нужно хранить и засунуть в сессию.$stmt = $conn->prepare('SELECT id,password FROM users WHERE login = ?');
А как тогда лучше проверять тот человек или нет?Никак, или попросите паспорт предъявить. То что человек ввел логин и пароль является для вас гарантией идентификации, а то что третьим лицам пароль достался под воздействием психотропных препаратов, терморектального криптоанализа или стырен с бумажки на мониторе вас волновать не должно. Вас волнует совпадение логина и пароля. Все. В сессию записали - условный вася ввел правильные данные. Все.
в вашем случае isset() лучше заменить на !empty()
здесь зачем 2 запроса? У вас в 1 можно все выбрать, не делайте лишних запросов.
if (isset($_POST['submit'])) {
тоже не совсем верная проверка, для этого есть$_SERVER['REQUEST_METHOD'] == 'POST'
, и дальше у вас без проверок используются всякие post переменные... Их вообще то надо как-то проверить...if ($user) {
старайтесь так не делать, проверяйте хотя бы !empty().