Мне было поручено устранить некоторые ошибки на сайте, построенном моей компанией несколько лет назад. Я хочу предвосхитить код, который я публикую здесь, с оговоркой, что я его не написал, и я знаю, что это не очень безопасная система входа в систему, но я был назначен только для исправления этой ошибки.
ПРОБЛЕМА. Когда пользователь входит в систему, после отправки формы страница обновляется, что требует повторного ввода учетных данных. Об ошибке входа не сообщается. До сих пор я мог дублировать эту проблему только в Firefox и Safari. После успешного входа в систему, если выйти из системы и снова войти в нее, кажется, все работает нормально. Это только после того, как вы изначально запустите браузер и попытаетесь войти в первый раз. Я продублировал это на разных компьютерах Mac / Windows.
Вот основная страница входа в систему HTML. Я вырезаю что-нибудь ненужное, но могу предоставить больше кода при необходимости.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
<body>
<form name="login" method="post" id="mainform" action="clogin.php">
<label for="username">Username:</label>
<input type="text" id="username" name="username"><br />
<label for="password">Password:</label>
<input type="password" id="password" name="password"><br />
<input type="submit" name="Submit" class="button" style="float:right;" value="Login">
</form>
</body>
Вот PHP, также обрезанный для жира:
<?php
$db = mysql_connect('***', '***', '***') or die("Couldn't connect to the database.");
mysql_select_db('***') or die("Couldn't select the database");
$result = mysql_query("SELECT count(id) FROM merchants WHERE passw='$_POST[password]' AND usern='$_POST[username]'") or die("Couldn't query the user-database.");
$num = mysql_result($result, 0);
if (!$num) {
// When the query didn't return anything,
// display the login form.
$message = "Login Failed: Incorrect username or password";
header('Location: login.php?message='.$message);
} else {
// Start the login session
session_start();
// All output text below this line will be displayed
// to the users that are authenticated. Since no text
// has been output yet, you could also use redirect
// the user to the next page using the header() function.
header('Location: merchants/index.php');
}
У кого-нибудь есть идея, с чего мне начать искать? Моя первая мысль: может быть, форма на самом деле не полностью отправлена? Как я могу сказать, если это произошло? Любые намеки или указатели были бы хорошими. Лично я не могу найти проблему с «кодом», которая может быть причиной этого.