@4sadly

Правильно ли сделана авторизация через сессии?

if (isset($_COOKIE['sid'])) {
    session_id($_COOKIE['sid']);
    session_start();
    if (isset($_SESSION['ip']) and isset($_SESSION['browser'])) {
        if ($_SESSION['ip'] !== $_SERVER['REMOTE_ADDR'] or $_SESSION['browser'] !== $_SERVER['HTTP_USER_AGENT']) {
            session_abort();
        }
    }
}
if (isset($_SESSION['login'])) {
    echo $_SESSION['login'];
} else {
    if (isset($_POST['submit'])) {
        $errors = array();
        $stmt = $conn->prepare('SELECT id,password FROM users WHERE login = ?');
        $stmt->execute(array($_POST['login']));
        $user = $stmt->fetch();
        if ($user) {
            if ($user['password'] == $_POST['password']) {
                session_id($user['id']);
                session_start();
                $_SESSION['ip'] == $_SERVER['REMOTE_ADDR'];
                $_SESSION['browser'] = $_SERVER['HTTP_USER_AGENT'];
                $_SESSION['id'] = $user['id'];
                $_SESSION['login'] = $_POST['login'];
            }
        } else {
            $errors[] = "Пользователь не найден";
        }
    }
}

Все хорошо или это может сломаться?
Шифрование паролей будет добавлено, про это не говорите, пока тестовый вариант)
Будет ли нормальным вариант проверять по hash, а не по ip+user agent пользователя?
  • Вопрос задан
  • 231 просмотр
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
session_start не требует проверки на существование чего-либо. Его просто надо вызывать в начале и все.

все эти проверки ип и клиента - больше паранойя, угон сессии конечно вещь возможная, но вам я думаю рановато об этом беспокоиться. Тем более что я могу с мобильного зайти, мне каждый раз как я сменил вышку и получил новый айпи нужно будет логиниться? Нааайс...

в сессии лучше всего хранить отдельно флаг логина $_SESSION['is_logged']; и отдельно массив $_SESSION['user']; где часто используемые данные юзера. Или внутри юзера: $_SESSION['user']['is_logged'];
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы