Intereting Posts
Создайте однобитовое растровое изображение (монохромное) в php php reflection получает свойства без получения свойств базового класса как расширить элементы массива как отдельные параметры для функции Отображение изображения в формате PDF с использованием fpdf Как обработать XML, содержащий пользовательские пространства имен, используя SimpleXML? Удаление строки из вывода php json Выберите случайные значения из массива Как сохранить номер страницы после перенаправления в CakePHP? Аутентификация отпечатка пальца для веб-приложения php разделение вывода тегов Symfony2 и Doctrine2: идентификатор / первичный ключ для объекта «X» не указан. Каждый объект должен иметь идентификатор / первичный ключ PHP глобальный или $ GLOBALS Соединение с MySQL не работает Я хочу сортировать 3-мерный массив в php Что такое использование пакета PHP и распаковки в реальном времени?

Как аутентифицировать пользователя в PHP / MySQL?

Недавно я узнал, как правильно добавлять имя пользователя и пароль в базу данных. Моя база данных – usersys, а таблица, хранящая пользовательскую информацию, называется userdb. Таблица имеет два столбца – имя пользователя (первичный), пароль.

Форма регистрации работает отлично, правильно вводит пользователя в базу данных, а также проверяет, находится ли пользовательское имя пользователя в базе данных или нет.

С учетом сказанного, я спрашиваю, может ли кто-нибудь помочь мне создать скрипт входа. Пока это то, что у меня есть:

$username = $_POST['username']; $password = $_POST['password']; $displayname = $_POST['username']; $displayname = strtolower($displayname); $displayname = ucfirst($displayname); echo "Your username: " . $displayname . "<br />"; mysql_connect("localhost", "root", "******") or die(mysql_error()); echo "Connected to MySQL<br />"; mysql_select_db("usersys") or die(mysql_error()); echo "Connected to Database <br />"; $lcusername = strtolower($username); $esclcusername = mysql_real_escape_string($lcusername); $escpassword = mysql_real_escape_string($password); $result = mysql_query("SELECT * FROM userdb WHERE username='$esclcusername' AND password='$escpassword'") or die(mysql_error()); $row = mysql_fetch_array( $result ); $validateUser = $row['username']; $validatePass = $row['password']; 

Данные POST находятся на предыдущей странице входа в систему. Я хочу, чтобы этот скрипт проверял таблицу (userdb) и нашел строку имени пользователя, введенную пользователем из предыдущей формы, и убедитесь, что введенный пароль соответствует паролю имени пользователя, установленному в этой строке, в таблице userdb.

Я также хочу, чтобы какой-либо способ проверить, существует или нет, если введенное имя пользователя существует, чтобы сообщить пользователю, что введенное имя пользователя не существует, если оно не может быть найдено в таблице.

Solutions Collecting From Web of "Как аутентифицировать пользователя в PHP / MySQL?"

Это не прямой ответ на этот вопрос, а полезное добавление. Вы должны использовать функцию MYSQL SHA1 для шифрования пароля перед сохранением в базе данных.

 $user = $_POST['userid']; $pwd = $_POST['password']; $insert_sql = "INSERT into USER(userid, password) VALUES($user, SHA1($pwd))"; $select_sql = "SELECT * FROM USER WHERE userid=$user AND password=SHA1($pwd))"; 

Вы можете использовать сеансы. Сессии – это глобальные переменные, которые при установке остаются с пользователем во время просмотра сайта.

Поскольку вы изучаете PHP, попробуйте этот учебник на официальном сайте.

Но то, что вы будете делать в теории, – это когда имя пользователя и пароль совпадают, вы устанавливаете переменную сеанса

 $_SESSION["auth"] = true; $_SESSION["user_id"] = $row["user_id"]; 

Затем выполните проверку, чтобы проверить, не аутентифицирован ли пользователь.

Один из способов сделать это (ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: не обязательно лучшая практика):

 $result = mysql_query("SELECT id FROM userdb WHERE username='$esclcusername' AND password='$escpassword'") or die(mysql_error()); $row = mysql_fetch_array( $result ); $id = (int)$row['id']; if($id > 0) { //log in the user session_start(); $_SESSION['userId'] = $id; $_SESSION['username'] = $displayname; } 

… и на страницах, требующих проверки подлинности:

 session_start(); if(!isset($_SESSION['userId'])) { die('You need to be logged in!!!'); } else { echo 'Welcome ' . $_SESSION['username']; } 

Подробнее о сеансах PHP.

Мне нравится использовать как $_SESSION и MYSQL Checks с любым POST входа. Это должно помочь начать несколько вещей.

 $username = mysql_real_escape_string($_POST[username]); $password = strip_tags($_POST[password]); $password = sha1($password); if(isset($username) && isset($password) && !empty($username) && !empty($password)) { $sql = mysql_query("SELECT * FROM users_column WHERE username = '$username' AND password = '$password'"); //Check the number of users against database //with the given criteria. We're looking for 1 so //adding > 0 (greater than zero does the trick). $num_rows = mysql_num_rows($sql); if($num_rows > 0){ //Lets grab and create a variable from the DB to register //the user's session with. $gid = mysql_query("SELECT * FROM users_column WHERE username = '$username' AND password = '$password'"); $row = mysql_fetch_assoc($gid); $uid = $row[userid]; // This is where we register the session. $_SESSION[valid_user] = $uid; //Send the user to the member page. The userid is what the //session include runs against. header('Location: memberpage.php?userid='.$userid); } //If it doesn't check out -- throw an error. else { echo 'Invalid Login Information'; } } 

ПРИМЕЧАНИЕ. Вам нужно будет запустить файл страницы с помощью session_start() и создать отдельную проверку сеанса с указанием session_start() а затем ваши прогрессии, например, if($_SESSION[valid_user] != $userid) что-то делать.

Вы можете использовать инструкцию select для возврата из MySQL пароля для указанного имени пользователя. Если у вас есть пустой набор результатов, то у вас нет имени пользователя в таблице.

Если вам нужно, чтобы пользователь был аутентифицирован более чем на одной php-странице, то один из вариантов, который должен использовать сеансы ( http://www.php.net/manual/en/function.session-start.php ).

Кроме того, я думаю, вы должны думать о безопасности, то есть предотвращать SQL-инъекцию:

 $variable = mysql_real_escape_string($_POST['variable']) 

и избегать «умирать» (обрабатывать ошибки и возвращать удобные для пользователя сообщения из сценария).

Я также подумал бы о том, чтобы не хранить пароли в вашей базе данных. Один из способов хэшей с MD5 или SHA1 – это способ добавления уровня безопасности на уровне db.

См. http://php.net/md5 или http://php.net/sha1 для получения дополнительной информации.

Я согласен с идеей использования переменных SESSION при аутентификации пользователя.

Простой способ аутентификации пользователя выглядит следующим образом

 //connect the mysql_db $mysql_connect() $mysql_select_db() //reading from mysql table $res="SELECT * FROM table WHERE name=$username AND password=$password"; $val=mysql_query($res); //authentication $count=mysql_num_rows($val); if($count==1) //authenticate the user else through an error