Моя страница работала правильно, когда на ней была одна страница. После того, как я добавил перенаправление на другую страницу, кажется, что флажок «Запомнить меня» больше не работает. Я не уверен, влияет ли на него команда выхода, как только я удаляю else и выхожу на обоих, тогда он запоминает. Я пытаюсь создать профиль администратора. Админ = 1 пользователь = 0
Я попытался удалить выход; и перенаправления.
Но я очень хочу их сохранить
<!DOCTYPE html>
<head>
<!-- Bootstrap core CSS -->
<link href = "bootstrap.min.css" rel = "stylesheet">
</head>
<style>
.alert {
text-align: center;
padding: 12px;
background-color: #f44336; /* Red */
color: white;
margin-bottom: 10px;
}
</style>
<?php
session_start(); // Starting Session
$error=''; // Variable To Store Error Message
if (isset($_POST['submit'])) {
if (empty($_POST['username']) || empty($_POST['password'])) {
$error = "Username or Password is invalid";
}
else
{
// Define $username and $password
$username=$_POST['username'];
$password=$_POST['password'];
// Establishing Connection with Server by passing server_name, user_id and password as a parameter
$connection = mysql_connect("localhost", "root", "password");
// To protect MySQL injection for Security purpose
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
// Selecting Database
$db = mysql_select_db("kike", $connection);
// SQL query to fetch information of registerd users and finds user match.
$query = mysql_query("select * from login where password='$password' AND username='$username'", $connection);
$rows = mysql_num_rows($query);
if ($rows == 1) {
$query = mysql_query("select * from login where password='$password' AND username='$username' AND admin = 1", $connection);
$master = mysql_num_rows($query);
$_SESSION['login_user']=$username; // Initializing Session
if ($master == 1) { // some way of identifying an admin
// admin
header("location: wood/profile.php"); // Redirecting To Other Page
exit;
} else {
// user
header("location: user/profile.php");
exit;
}
$_SESSION["id"]= $user["id"];
if (!empty($_POST["remember"])) {
setcookie ("username",$_POST["username"],time()+ (10 * 365 * 24 * 60 * 60));
setcookie ("password",$_POST["password"],time()+ (10 * 365 * 24 * 60 * 60));
} else {
if (isset($_COOKIE["username"])) {
setcookie ("username","");
}
if (isset($_COOKIE["password"])) {
setcookie ("password","");
}
}
}
else {
$error = "Username or Password is invalid";
echo ' <div class = "fixed-top">
<div class = "alert alert-primary" role = "alert">
Invalid username or password
</div> </div>' ;
}
mysql_close($connection); // Closing Connection
}
}
?>
</html>
Не полагайтесь на функции real_escape_string() для предотвращения SQL-инъекций, их одних недостаточно. Вы должны использовать подготовленные операторы со связанными параметрами либо через mysqli, либо через ЗОП. У Эта почта есть несколько хороших примеров.
password_hash() и password_verify().
session_start(); не будет работать, если вы не объявите его в самом верху своего кода. Это должно произойти до любого пробела или рендеринга DOM.






Я сделал страницу входа в систему ранее ... надеюсь, что это поможет вам ... вот она:
<?php
session_start();
$username = strtolower(htmlspecialchars($_POST['username']));
$usernameUW = ucfirst(htmlspecialchars($_POST['username']));
$password = $_POST['password'];
$path = $_SERVER['DOCUMENT_ROOT'] . "//regs/" . $username . ".txt";
$_SESSION['signInErrors'] = array();
if (!file_exists($path)){
$fileOpen = fopen($path, "r");
$file = fread($fileOpen, filesize($path));
fclose($fileOpen);
$hash = "$" . explode("$", $file)[1] . "$" . explode("$", $file)[2] . "$" . explode("$", $file)[3];
}
$_SESSION["signInErrors"] = array();
$errors = 0;
$testErrors = 0;
if (file_exists($path)) {
$_SESSION["signInErrors"][$testErrors] = "";
$testErrors += 1;
} else if (password_verify($password, $hash)) {
$_SESSION["signInErrors"][$testErrors] = "";
$testErrors += 1;
} else {
$_SESSION["signInErrors"][$testErrors] = "Incorrect username or password!";
$errors += 1;
$testErrors += 1;
}
if ($errors === 0) {
if (isset($_SESSION["previousSite"])) {
$_location = "Location: https://" . $_SERVER["HTTP_HOST"] . "/" . $_SESSION["previousSite"];
} else {
$_location = "Location: https://" . $_SERVER["HTTP_HOST"];
}
$_SESSION['username'] = $usernameUW;
unset($_SESSION['signInErrors']);
header($_location);
exit();
} else {
header("Location: https://" . $_SERVER["HTTP_HOST"] . "/signin");
exit();
}
?>Вместо этого я бы использовал $_СЕССИЯ[].
Почему мой пост не помог?
Обратите внимание, что функции
mysql_*устарели с версии 5.5 (июнь 2013 г.) и удалены с версии 7.0 (декабрь 2015 г.). Вместо этого используйте mysqli или ЗОП.