Привет, ребята, я новичок в PHP и пытаюсь понять, как реализовать $ _session в очень простой системе входа:
<?php
session_start();
include 'dbconn.php';
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE username = '$username'";
$result = $conn->query($sql);
$row = $result->fetch_object();
if($username == "$row->username" && $password == "$row->password") {
$_SESSION['loggedin'] = "$username";
header('Location: admin.php');
} else {
header('Location: index.php?msg=wrong-username-or-password');
}
Проблема в том, что если я использую локальные переменные, например:
$admin_userName = 'admin';
$admin_password = '1234';
и затем сделать сравнение
if($username == "$adminusername" && $password == "$adminpassword") {
$_SESSION['loggedin'] = "$username";
header('Location: admin.php');
$ _Session работает отлично. Но когда я использую это:
if($username == "$row->username" && $password == "$row->password") {
$_SESSION['loggedin'] = "$username";
header('Location: admin.php');
Сессия не работает. Без сеанса вышеуказанное утверждение работает отлично!
login.php
<?php
session_start();
include 'dbconn.php';
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE username = '$username'";
$result = $conn->query($sql);
$row = $result->fetch_object();
if($username == $row->username && $password == $row->password) {
$_SESSION['loggedin'] = $username;
header('Location: apptify.php');
} else {
header('Location: index.php?msg=wrong-username-or-password');
}
logout.php
<?php
session_start();
unset($_SESSION['loggedin']);
header('Location: index.php');
?>
Я действительно потерян, любая помощь приветствуется.
Проблема в том, что если я использую локальные переменные, например:
$ admin_userName = 'admin'; $ admin_password = '1234'; и затем сделать сравнение, если ($ username == "$ adminusername" && $ password == "$ adminpassword") {
Проблема в том, что вы используете:
$admin_userName = 'admin';
$admin_password = '1234';
затем используя:
if($username == "$adminusername" && $password == "$adminpassword")
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
Вы забыли символы подчеркивания и не соответствовали строкам букв переменных.
Переменные чувствительны к регистру.
if($username == "$admin_userName" && $password == "$admin_password")
Мой тестовый скрипт с успехом:
<?php
session_start();
$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';
$con = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME)
or die(mysqli_connect_error());
$_POST['username'] = "John";
$username = $_POST['username'];
$_POST['password'] = "Johnny";
$password = $_POST['password'];
$_SESSION['loggedin'] = "$username";
echo $username; // echo'd John
$sql = "SELECT * FROM users WHERE username = '$username'";
$result = $con->query($sql);
$row = $result->fetch_object();
if($username == "$row->username" && $password == "$row->password") {
$_SESSION['loggedin'] = "$username";
// header('Location: admin.php');
echo "Match!";
} else {
// header('Location: index.php?msg=wrong-username-or-password');
echo "No match.";
}
Мне нужно указать, что:
Вы должны изучить использование mysqli
с подготовленными операторами или PDO с подготовленными инструкциями, они намного безопаснее.
Что касается хранения паролей.
Если вы еще не используете хеширование паролей, а не то, что может быть простым текстовым методом, который вы можете использовать, я предлагаю вам изучить функцию CRYPT_BLOWFISH или PHP 5.5 password_hash()
. Для PHP <5.5 используйте password_hash() compatibility pack
.
Он должен быть без кавычек:
if($username == $row->username && $password == $row->password) {
$_SESSION['loggedin'] = $username;
header('Location: index.php');
}
$row->username
и$row->password
установлены так, как вы ожидаете?