Что заставляет страницу входа в систему не открываться после ввода правильных учетных данных для входа?
Я тестировал страницу формы входа с правильными учетными данными,и страница отлично загружается, проверяя учетные данные и предлагая мне получить доступ к деталям в моей локальной серверной системе.
Тем не менее,я развернул его на удаленном сервере,но всякий раз,когда я вхожу в систему с правильными учетными данными, страница вращается и перенаправляется обратно на ту же страницу, что может означать, что я не тестировал свою систему как на удаленном сервере, так и на локальной системе одновременно.
Это страница входа в систему /index.php форма;
<?php //admin login page/index page session_start(); include('includes/config.php'); if(isset($_POST['adlogin'])) { $uname=$_POST['username']; $password=$_POST['password']; $sql ="SELECT UserName,Password FROM admin WHERE UserName=:uname and Password=:password"; $query= $dbh -> prepare($sql); $query-> bindParam(':uname', $uname, PDO::PARAM_STR); $query-> bindParam(':password', $password, PDO::PARAM_STR); $query-> execute(); $results=$query->fetchAll(PDO::FETCH_OBJ); if($query->rowCount() > 0) { $_SESSION['alogin']=$_POST['username']; echo "<script type='text/javascript'> document.location = 'dashboard.php'; </script>"; } else{ echo "<script>alert('Invalid Admin Login Details');</script>"; } } ?> <!DOCTYPE HTML> <html> <head> </head> <body> <div class="main-wthree"> <div class="container"> <div class="sin-w3-agile"> <h2>Admin</h2> <form method="post"> <div class="username"> <span class="username text-center">Username</span> <input type="text" name="username" class="name" placeholder="" required=""> <div class="clearfix"></div> </div> <div class="password-agileits"> <span class="username text-center">Password</span> <input type="password" name="password" class="password" placeholder="" required=""> <div class="clearfix"></div> </div> <div class="login-w3"> <input type="submit" class="login" name="adlogin" value="LogIn"> </div> <div class="clearfix"></div> </form> </div> </div> </div> <?php include('includes/footer.php');?> </body> </html>
<?php // DB credentials. define('DB_HOST','localhost'); define('DB_USER','database_username'); define('DB_PASS','database_password'); define('DB_NAME','database_name'); // Establish database connection. try { $dbh = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USER, DB_PASS,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")); } catch (PDOException $e) { exit("Error: " . $e->getMessage()); } ?>
Файл панели мониторинга;
<?php session_start(); include('includes/config.php'); if(strlen($_SESSION['alogin'])==0) { header('location:dashboard.php'); } else{ ?> <!DOCTYPE HTML> <html> <head>.......
Что я уже пробовал:
Я попытался добавить:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
в блок try, после нового постановления(...)
Но все еще сталкиваясь с той же проблемой,файл входа перенаправляется обратно,я все еще не могу получить доступ к файлу панели мониторинга.Это работает на моих локальных тестах хоста, но на удаленном сервере.
MadMyche
Я пропустил раздел, где это имя пользователя/пароль используется для аутентификации и где установлен сеанс[alogin]?
Andre Oosthuizen
define('DB_HOST','localhost'); не будет работать на сервере
quintumnia
я изменил имя хост - сервера,но все равно дал тот же ответ
Richard Deeming
Вы храните пароли в виде обычного текста. Не делай этого.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]
PHP предоставляет встроенные функции, которые помогут вам сделать все правильно:
PHP: password_hash[^]
РНР: функцию password_verify[^]
quintumnia
Что делать, если я зашифрую с помощью $password=md5($_POST['password']);
Есть ли в этом смысл?
Richard Deeming
Нет.
MD5 - Википедия[^]
Безопасность хэш-функции MD5 серьезно нарушена. Существует коллизионная атака, которая может найти коллизии в течение нескольких секунд на компьютере с процессором Pentium 4 2,6 ГГц. Кроме того, существует также атака столкновения выбранных префиксов, которая может вызвать столкновение для двух входов с указанными префиксами в течение нескольких секунд, используя готовое вычислительное оборудование.
Используйте встроенные методы для генерации соленого хэша ваших паролей при их хранении и для проверки соответствия введенного пароля сохраненному соленому хэшу при входе в систему.