PHP сессия не работает

0

Привет, ребята, я новичок в 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');
?>

Я действительно потерян, любая помощь приветствуется.

  • 1
    Имейте в виду, что вы сравниваете две разные вещи. Вы уверены, что даже входите в состояние? $row->username и $row->password установлены так, как вы ожидаете?
  • 0
    Они должны быть установлены правильно, и условие должно быть правильным, так как оно работает без $ _session
Показать ещё 10 комментариев
Теги:
session
login

2 ответа

1
Лучший ответ

Проблема в том, что если я использую локальные переменные, например:
$ 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.

0

Он должен быть без кавычек:

if($username == $row->username && $password == $row->password) {

   $_SESSION['loggedin'] = $username; 
   header('Location: index.php');
}
  • 0
    Не имеет значения здесь!
  • 0
    Это не имело никакого значения ...
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню