2015-03-11 4 views
0

Эй, ребята Я новичок в PHP и пытается выяснить, как реализовать $ _SESSION в самой базовой системе авторизации: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: 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 –

+0

Добавьте эхо в состояние, чтобы убедиться, что вы входите в условие. –

ответ

1

Проблема заключается в том, что, когда я, если использовать локальные переменные, как:
$ admin_userName = 'Admin'; $ admin_password = '1234'; , а затем сделать сравнение если ($ имя пользователя == "$ имя_пользователя_администратора" & & $ пароль == "$ AdminPassword") {

Проблема в том, что, вы используете:

$admin_userName = 'admin'; 
$admin_password = '1234'; 

затем с помощью:

if($username == "$adminusername" && $password == "$adminpassword") 
       ^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^ 

Вы забыли подчеркивание и не соответствующие переменные lettercase.

Переменные чувствительны к регистру.

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 with prepared statements или PDO with prepared statements, они 'намного безопаснее.

Что касается хранения паролей.

Если вы еще не являетесь хешированием паролей, а не тем, что может быть простым текстовым методом, который вы можете использовать, я предлагаю вам взглянуть на функцию CRYPT_BLOWFISH или PHP 5.5's 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

Здесь не имеет значения! – Rizier123

+0

Это не имело значения ... –

+0

Это не решит проблему. Удаление котировок ничего не меняет. –

Смежные вопросы