2013-09-15 9 views
-3

Я кодирую скрипт PHP, и мне нужен логин. Поэтому я хочу проверить входные данные в базе данных с именем пользователя и паролем. Это лучший способ сделать это, выполнив запрос, когда я сравниваю, если почтовые данные одинаковы (функция SQL «нравится»), как в базе данных? После этого я подсчитываю строки mysql. Если он равен нулю, я запрещаю вход в систему. Если это один, я разрешаю логин.Какой способ входа в PHP - лучший способ?

Это обычный и правильный способ сделать это или есть лучшие способы? Я хочу иметь лучший современный способ. Вот почему я тоже использую HTML5.

+0

Вы еще что-нибудь пробовали? – ChristonianCoder

+0

Что значит? Я знаю разные способы сделать это, но я хочу использовать лучший метод, потому что мне не нравится использовать старые устаревшие. – CodeShark

+0

Вы не можете использовать LIKE, но ГДЕ! если хэш из ввода совпадает с полем пароля sql, установите сеансы настройки и т. д. Если результат db не равен> 0, просто не создавайте сеансы и т. Д., Просто. HTML5 не имеет к этому никакого отношения. –

ответ

0

Часть моего кода. Настройка файлов cookie для последующего входа в файл cookie, а также установка попыток в сеансе для показа captcha, если попытки превысили определенное количество логинов. (Надеюсь, что вы можете понять это немного)

вызов для входа в аккаунт

if($this->check_signin_errors()) { 
    if($this->signin($this->user_email, sha1($this->user_pass))) { //$user_pass hashed 
     header("Location: /account/"); 
     exit(); 
    } else { 
     $this->generate_captcha(); 
    } 
    return true; 
    } 

функция для входа в аккаунт

private function signin($user_email, $user_pass) { 
    global $con; 
    $query = mysqli_query($con, "SELECT *, COUNT(id) FROM `accounts` WHERE `user_email` = '".mysqli_real_escape_string($con, $user_email)."' AND `user_pass` = '".mysqli_real_escape_string($con, $user_pass)."' AND access_level >= '0'"); 
    $result = mysqli_fetch_assoc($query); 
    if($result['COUNT(id)'] > 0) { 
     $_SESSION['account_logged']  = true; 
     $_SESSION['user_id']    = $result['id']; 
     $_SESSION['user_email']   = $result['user_email']; 
     $_SESSION['user_pass']    = $result['user_pass']; 
     $_SESSION['access_key']   = $result['access_key']; 
     $_SESSION['access_level']   = $result['access_level']; 

     $this->set_cookie('cookie_name', '1/'.$_SESSION['user_email'].'/'.$_SESSION['user_pass'], 7776000); 

     $_SESSION['attempt'] = 1; 
     return true; 
    } 
    $_SESSION['account_logged'] = false; 
    $_SESSION['attempt'] = $_SESSION['attempt'] + 1; 
    $this->throw_error(5); 
    return false;  
    } 
0

Самый последний подход будет использовать PHP 5.5 password hashing функции.

И поскольку не все используют 5.5 еще, есть a library, который реализует его для более ранних версий PHP.

Поскольку хеширующие пароли используют динамическую «соль», случайную строку, сгенерированную для каждого пользователя отдельно, при входе в систему вам действительно нужно прочитать базу данных пользователя, чтобы получить текущий хэш, потому что, когда вы хотите сравнить пароль для входа в систему , вам нужен хэш в качестве второго входа функции password_verify().

На самом деле вы пытаетесь найти пользователя в базе данных (не используйте здесь «LIKE», это для поиска с заполнителями - ваш пользователь должен будет правильно ввести свое имя пользователя). Если ни один не найден: нет входа. Если два найдены: вы должны добавить уникальный индекс в имя пользователя, иначе у вас будет два пользователя с тем же именем.

Если одна запись найдена, вы ее прочитали, сравните хеши, а затем разрешите ему продолжить.

Смежные вопросы