У меня есть небольшая проблема с моим скриптом входа в PHP. Когда пользователь входит в систему, он работает только после второй попытки, нет ошибки, но похоже, что пользователь ввел неправильный пароль с первой попытки.Форма входа в систему всегда занимает более одной попытки
Иногда, когда я тестировал сайт, после первого входа в систему он отправляет меня обратно на страницу входа в систему. Затем я вручную вводим URL-адрес домашней страницы, и он иногда туда меня оттуда. (Там есть php вверху, который проверяет, зарегистрирован ли пользователь уже так, что иногда угадывается, что скрипт в журнале устанавливает значение SESSION в true).
Большинство времени это не делает. Он просто перенаправит меня обратно в журнал, не распечатывая сообщение об ошибке. Я считаю, что проблема находится в верхней части домашней страницы, а не с помощью сценария входа в систему, потому что после удаления перенаправления, если mysql не возвращает строку с совпадением пользователя/пароля, она всегда направит меня на страницу регистрации.
Вот мой сценарий Войти
<?php
session_start();
// Include required MySQL configuration file and functions
// Check if user is already logged in
if (isset($_SESSION['logged_in'])) {
// If user is already logged in, redirect to main page
redirect('home.php');
}
else {
// Make sure that the user submitted a username/password and username
// only consists of alphanumeric Chars
if ((!isset($_POST['username'])) || (!isset($_POST['password'])) OR
(!ctype_alnum($_POST['username']))) {
redirect('login.php');
}
// Connect to database
$mysqli = @new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
if (mysqli_connect_errno()) { printf ("Unable to connect to database %s",
mysqli_connect_error());
exit();
}
//Escape any unsafe characters before querying database
$username = $mysqli->real_escape_string($_POST['username']);
$password = $mysqli->real_escape_string($_POST['password']);
// construct SQL statement for query & execute
$sql = "SELECT * FROM peeps WHERE name = '" . $username . "'
AND pword = SHA1('" . $password . "') ";
$result = $mysqli->query($sql);
// If one row is returned, username and password are valid.
if ($result->num_rows == 1) {
// Set the session variable for login status to true
$_SESSION['logged_in'] = true;
$_SESSION['name'] = $username;
echo "successfull ";
redirect('home.php');
}
else {
echo "didnt return row<hr>";
redirect back to login page.
redirect('loginPage.php');
}
}
?>
А вот код в верхней части моей домашней странице ..
<?php
// Start session
session_start();
// Include required functions file
require_once('functions.php');
// Check login status... if not logged in redirect to login screen
if (check_login_status() == false) {
redirect('loginPage.php');
}
$username = $_SESSION['name'];
?>
Любая помощь будет признателен, если вы хотите немного больше пояснение о том, что я имею в виду, вы можете подписаться на gateKeeper и посмотреть, о чем я говорю.
Также это мой первый вопрос, поэтому любые комментарии по поводу того, как я его спросил, будут оценены.
Спасибо!
Как выглядит функция 'redirect()'? Одна из потенциальных проблем заключается в том, что вы эхом отдаете все, прежде чем вы вызываете эту функцию, поэтому, если вы выполняете перенаправление «header» там, это может быть неудачно, поскольку заголовки уже отправлены. – jeroen