2014-09-18 3 views
-1

Итак, я создал систему входа в систему, она инициирует сеанс, проверяет правильность пароля и задает переменные сеанса.Ошибка PHP в проверке переменной SESSION

Вот несколько вещей, которые вы могли бы хотеть отметить:

  • Он успешно входит в
  • Там нет никаких проблем с подключением тузд
  • Все файлы находятся места правильно в папках
  • Там нет предупреждений или сообщений об ошибках
  • Структура таблицы MYSQL верна и нет ошибок в базе данных

Примечание: все функции, которые я собираюсь определить в том же файле «functions.php»

За здесь у нас есть функция сессии

include_once("global_config.php"); 
include_once("db_connect.php"); 
function sec_session_start() 
{ 
    $session_name = 'sec_session_id'; 
    $secure = SECURE; 
    $httponly = true; 
    if(ini_set('session.use_only_cookies', 1) === FALSE) 
    { 
     echo "Could not initiate a secure session"; 
     exit; 
    } 

    $cookieparams = session_get_cookie_params(); 
    session_set_cookie_params($cookieparams['lifetime'],$cookieparams['path'],$cookieparams['domain'],$secure,$httponly); 
    session_name($session_name); 
    session_start(); 
    session_regenerate_id(); 
} 

Файл global_config определить пароль MySQL, базы данных , пользователь и хост, а файл db_connect просто возвращают mysqli_connect для подключения к базе данных.

И это здесь функция Логин метод

function login($user,$pass){ 
    sec_session_start(); 
    $link=linkit(); 
    if(empty($user) || empty($pass) || !isset($user) || !isset($pass)){ 
     echo "Error Code: 313, Please contact network administrator for more information"; 
     exit; 
    }else{ 
     $usercheck = "SELECT `id`,`username`,`password`,`salt` FROM `".LOGINTABLE."` WHERE `username`=? LIMIT 1"; 
     if($stmt=$link->prepare($usercheck)){ 
      $stmt->bind_param('s',$user); 
      $stmt->execute(); 
      $stmt->store_result(); 
      $stmt->bind_result($id,$username,$realpassword,$salt); 
      $stmt->fetch(); 
      $stmt->close(); 

      if(empty($realpassword)){ 
       echo 'Unrecognized Username, Please enter a valid username'; 
       exit; 
      }else{ 
       if($realpassword===$pass){ 
        $_SESSION['username'] = $user; 
        $_SESSION['user_id'] = $id; 
        $_SESSION['login_string'] = hash('sha512',$pass); 
        return true; 
       }else{ 
        echo "Invalid Password!"; 
        exit; 
       } 
      } 
     } 
    } 
} 

linkit(), которая определена в db_connect.php, которая возвращает mysqli_connect. Также обратите внимание, что скрипт успешно делает его для установки переменной Session, что означает, что он возвращает true.

ТЕПЕРЬ ПРОБЛЕМА это, когда я проверяю для авторизован

function check_login() 
{ 
    if(isset($_SESSION['user_id']) && 
      isset($_SESSION['login_string']) && isset($_SESSION['username'])) 
    { 
     $user_id = $_SESSION['user_id']; 
     $username = $_SESSIOOO['username']; 
     $login_string = $_SESSION['login_string']; 

     $pwd_check = "SELECT `password` FROM `".LOGINTABLE."` WHERE `user_id`=? LIMIT 1"; 
     if($stmt = linkit()->prepare($pwd_check)) 
     { 
      $stmt->bind_param('s',$user_id); 
      $stmt->execute(); 
      $stmt->bind_result($realpassword); 
      $stmt->fetch(); 
      $stmt->close(); 
      $hashedpass = hash('sha512',$realpassword); 
      if($login_string==$hashedpass){ 
       return true; 
      }else{ 
       return false; 
      } 
     }else{ 
       return true; 
     } 
    }else{ 
     return false; 
    } 
} 

И, наконец, это где я обрабатываю мой сценарий входа. Также обратите внимание, что ошибок в методах POST и других событий нет. Все работают нормально.

Это в отдельном файле PHP и НЕ в functions.php

<?php 
include_once '../includes/functions.php'; 
if(empty($_POST['loginuser']) || !isset($_POST['loginuser']) || !isset($_POST['id']) || empty($_POST['id']) || !isset($_POST['password']) || empty($_POST['password'])) 
{ 
    echo "Error Code: 412, Please contact network administrator for more information"; 
    exit; 
}else{ 
    if($_POST['loginuser']==="true") 
    { 
     $user = $_POST['id']; 
     $pass = $_POST['password']; 
     if(login($user,$pass)==true) 
     { 
      echo "Logged In!"; 
     }else 
     { 
      echo "Failed to login, check your username or password"; 
     } 
    } 
} 
?> 

Дополнительная информация:

  • Ответ я получаю это "Записан В"
  • Сессия успешно крепирована

ПРОБЛЕМА: Когда я проверяю статус входа в систему, он возвращает false, несмотря на наличие заданных переменных сеанса.

+0

ПРИМЕЧАНИЕ: check_login() всегда возвращает FALSE. ЭТО ПРОБЛЕМА – DaBaws

+0

Пожалуйста, уточните **, в чем проблема **.Вы бросили много кода с первым упоминанием о том, почему вы все это сбрасываете. – deceze

+0

Когда я проверяю статус входа в систему, он возвращает false, несмотря на наличие заданных переменных сеанса. – DaBaws

ответ

1

В check_login вы хэширования пароля, а затем сравнить unhashed пароль

function check_login() 
{ 
    if(isset($_SESSION['user_id']) && 
      isset($_SESSION['login_string']) && isset($_SESSION['username'])) 
    { 
     $user_id = $_SESSION['user_id']; 
     $username = $_SESSIOOO['username']; 
     $login_string = $_SESSION['login_string']; 

     $pwd_check = "SELECT `password` FROM `".LOGINTABLE."` WHERE `user_id`=? LIMIT 1"; 
     if($stmt = linkit()->prepare($pwd_check)) 
     { 
      $stmt->bind_param('s',$user_id); 
      $stmt->execute(); 
      $stmt->bind_result($realpassword); 
      $stmt->fetch(); 
      $stmt->close(); 
      $hashedpass = hash('sha512',$realpassword); 
      if($login_string==$hashedpass){ 
       return true; 
      }else{ 
       return false; 
      } 
     }else{ 
       return true; 
     } 
    }else{ 
     return false; 
    } 
} 
+0

Он даже не сравнивает пароль. Он терпит неудачу, потому что переменные не установлены. – DaBaws

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