quintumnia Ответов: 2

Что заставляет страницу входа в систему не открываться после ввода правильных учетных данных для входа?


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

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

Это страница входа в систему /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 ГГц. Кроме того, существует также атака столкновения выбранных префиксов, которая может вызвать столкновение для двух входов с указанными префиксами в течение нескольких секунд, используя готовое вычислительное оборудование.

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

2 Ответов

Рейтинг:
2

Andre Oosthuizen

Похоже, что этот фрагмент кода вызывает зависание, так как $_SESSION['alogin'] не установлен, возвращаясь на панель мониторинга.

<pre><?php
session_start();
include('includes/config.php');
if(strlen($_SESSION['alogin'])==0)
    {   
header('location:dashboard.php');
}
else{
?>


Где вы устанавливаете алогин для вашего сеанса?

Я бы также попробовал следующий код -

if (session_status() == PHP_SESSION_NONE) {
	session_start();
}

include('includes/config.php');

if(isset($_SESSION['alogin'])) //checks if the variable has been declared/accessed...
    {   
header('location:dashboard.php');
}
else
{
   header('location:index.php');
}


quintumnia

Братан, я уже пытался добавить полную страницу книги. index.php страница,внесла некоторые изменения в вопрос.
Удивительно,но когда я пытаюсь войти в систему с законными учетными данными администратора на своем локальном сервере,он отлично направляет меня на панель мониторинга(dashboard.php) страница. Поэтому проблема возникает, когда я получаю доступ к той же странице администратора на удаленном сервере!Я перепробовал все возможные способы и решения ,но ничего не получается, чтобы помочь мне

Andre Oosthuizen

после $results сделайте var dump - var_dump($results); и посмотрите, что возвращается. Если есть возврат, то не серверный, если нет, то проблема с вашим серверным подключением.

quintumnia

Да,брат, все это время это были внутренние конфликты баз данных в промежутках доступности.

Andre Oosthuizen

:) Рад, что вы смогли это исправить, надеюсь, я смог где-то помочь. Кроме кодирования!

Рейтинг:
0

quintumnia

All the time and committed.
The issue has been rising from the back-end databases ;whereby i created one database and the changed to the new one.
However,the old database has been creating interference accessing the new database remotely.

Therefore,I deleted the old database and i refreshed the page,at-last everything came to normal.

After,a hard hustle,research...etc.