Это должна быть ваша базовая настройка
Сначала пользователь заходит на страницу входа и вводит свое имя пользователя / пароль. Мы назовем это login.php. Затем он отправляет материал в handler.php
HTML
<form method="POST" action="handler.php">
<input type="text" name="login[user]">
<input type="password" name="login[password]">
</form>
Затем скрипт-обработчик получает данные POST, обрабатывает, если и если хэши паролей совпадают, устанавливает cookie и перенаправляет обратно на страницу индекса.
Скрипт входа в систему
// Check for a Login Form
if (isset($_POST['login']) )
{
// Get the Data
$sql2 = "SELECT * from users";
$raw_user_list = pg_query($dbconn, $sql2);
$user_list = pg_fetch_all($raw_user_list);
// Go through each User
foreach ($user_list as $user => $passhash_md5)
{
// Check if the passwords match
if ( $passhash_md5 == md5($_POST['login']['password'] ))
{
// YOU NEED TO CREATE A COOKIE HERE
header("Location: index.php");
die("logged in");
}
}
header("Location: index.php");
die("wrong username/password");
}
Затем на каждой странице, которую вы хотите проверить на вход в систему, вы перенаправляете кого-либо, если у него нет файла cookie для входа. Вы можете расширить это, чтобы проверить правильность cookie для входа в систему.
Каждая страница
// Check for a Cookie
if(!$_COOKIE['login'])
{
header('Location: login.php');
die("User Required");
}
Я не совсем уверен, что вы пытались сделать там, но это базовая настройка для создания базовой формы входа.
Если вы пытаетесь проверить, совпадает ли комбинация, переданная в форму, с файлом cookie, попробуйте следующее:
// Set the Variables
$email = $_POST['email'];
$username = $_POST['username'];
$passhash_md5 = $_POST['passhash_md5'];
// COOKIE setting
/* $cookie may look like this
variables
$username = "username"$
$passhash_md5 = "password"$
$email ="email"$
$_SERVER['REMOTE_ADDR']=11.44.23.94$
before md5:$
"usernamepasshash_md5email11.44.23.94"$
after md5:$
"a08d367f31feb0eb6fb51123b4cd3cb7"$
*/
// Set what the cookie should look like
$login_cookie = md5(
$username .
$password .
$email .
$_SERVER['REMOTE_ADDR']
);
// Check For the Cookie
if (isset($_COOKIE['login']) )
{
// Check if the Login Form is the same as the cookie
if ( $login_cookie == $_COOKIE['login'] )
{
header("Location: index.php");
die("logged in");
}
header("Location: index.php");
die("wrong username/password");
}
Я удалил часть базы данных, потому что вы не используете часть базы данных ни в одном коде, так что это не имеет значения. Похоже, вы не пытаетесь войти в систему, а скорее проверяете, что куки, которые они установили на своем компьютере, содержат ту же строку, что и в форме.
Хорошо, окончательное издание, надеюсь
// Set the Variables
$email = $_POST['email'];
$username = $_POST['username'];
$password = $_POST['password'];
// COOKIE setting
/* $cookie may look like this
variables
$username = "username"$
$passhash_md5 = "password"$
$email ="email"$
$_SERVER['REMOTE_ADDR']=11.44.23.94$
before md5:$
"usernamepasshash_md5email11.44.23.94"$
after md5:$
"a08d367f31feb0eb6fb51123b4cd3cb7"$
*/
// Set what the cookie should look like
$login_cookie = md5(
$username .
$password .
$email .
$_SERVER['REMOTE_ADDR']
);
// Check For the Cookie
if (isset($_COOKIE['login']) )
{
// Check if the Login Form is the same as the cookie
if ( $login_cookie == $_COOKIE['login'] )
{
header("Location: index.php");
die("logged in");
}
header("Location: index.php");
die("wrong username/password");
}
// If no cookie, try logging them in
else
{
$sql2 = sprintf("SELECT * from users WHERE passhash_md5='%s',
pg_escape_string($login_cookie));
$raw_user_list = pg_query($dbconn, $sql2);
if ($user = pg_fetch_row($raw_user_list)) {.
setcookie('login', $login_cookie);
header("Location: index.php");
die("logged in");
} else {
header("Location: index.php");
die("wrong username/password");
}
}
Предложение Sprintf и Where, предоставленное Rezzif