Логин системата не работи, както трябва

samo

Registered
Здравейте :)

Пиша един малък проект и имам следните файлове:

PHP:
<?php
require_once('../../includes/initialize.php');
ob_start();
if($session->is_logged_in()) {
  redirect_to("index.php");
}

if(isset($_POST['submit'])) {
  $username = trim($_POST['username']);
  $password=  trim($_POST['password']);
  
  //check database to see if username/password exist
  $found_user = User::authenticate($username, $password);
  
  if ($found_user) {
    $session->login($found_user);
    echo "tyk sym";
   // log_action('login', "{$found_user->username} logged in");
    redirect_to("index.php");
  } else {
    //username/password combo was not found in the database
    $message = "Username/password combination incorrect.";
  }
} else { //Form has not been submitted
  $username = "";
  $password = "";
}
?>
<html>
  <head>
    <title>Photo Gallery</title>
    <link href="../stylesheets/main.css" media="all" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <div id="header">
      <h1>Photo Gallery</h1>
    </div>
    <div id="main">
      <h2>Staff login</h2>
      <?php echo output_message($message); ?>
      <form action="login.php" method="post">
        <table>
          <tr>
            <td>Username:</td>
            <td>
              <input type="text" name="username" maxlength="30" value="<?php echo htmlentities($username); ?>"
            </td>
          </tr>
          <tr>
            <td>Password: </td>
            <td>
              <input type="password" name="password" maxlength="30"
              value="<?php echo htmlentities($password); ?>" />
            </td>
          </tr>
          <tr>
            <td colspan="2">
              <input type="submit" name="submit" value="Login" />
            </td>
          </tr>
        </table>
      </form>
    </div>
      <div id="footer">Copyright <?php echo date("Y", time())?> Lyubomir Filipov</div>
  </body>
</html>
<?php if(isset($database)) { $database->close_connection();} ?>

user.php
PHP:
public static function authenticate($username="", $password="") {
   global $database;
   $username = $database->escape_value($username);
   $password = $database->escape_value($password);
   
   $sql = "SELECT * FROM users";
   $sql .= " WHERE username = '$username'";
   $sql .= " AND password='$password'";
   $sql .= " LIMIT 1";
   $result_array = self::find_by_sql($sql);
   return !empty($result_array) ? array_shift($result_array) : false;
 }

Session.php
PHP:
<?php

class Session {
  
  private $logged_in = false;
  public $user_id;
  
  function __construct() {
    session_start();
    $this->check_login();
    if ($this->logged_in) {
      $this->logged_in = false;
      //actions to take right away
    } else {
      //actions to take right away
    }
  }
  
  public function is_logged_in() {
   /* echo "wtf is the problem";
    if ($logged_in) {
      echo "IT IS TRUE";
    } else {
      echo "IT IS FALSE";
    }*/
    return $this->logged_in;
  }
  
  public function login($user) {
    //database should find the user
    if ($user) {
      echo "tyk sme session.php";
      $this->user_id = $_SESSION['user_id'] = $user->id;
      $this->logged_in = true;
    }
  }
  
  public function logout() {
    unset($_SESSION['user_id']);
    unset($this->user_id);
    $this->logged_in = false;
  }
  
  private function check_login() {
    if (isset($_SESSION)) {
      $this->user_id = $_SESSION['user_id'];
      $this->logged_in = true;
    } else {
      unset($this->user_id);
      $this->logged_in = false;
    }
  }
}

$session = new Session();

?>

index.php
PHP:
<?php
require_once('../../includes/initialize.php');
ob_start();
//echo $session->is_logged_in();
var_dump($session->is_logged_in());
$bool = $session->is_logged_in();
echo $bool;
if (!$session->is_logged_in()) {
   redirect_to("login.php");
}

if ($session->is_logged_in()) {
  echo "A TUK KAZVA, 4E E VQRNO";
}
?>
<?php include_layout_template('admin_header.php'); ?>
      <h2>Menu</h2>
    </div>
<?php include_layout_template('admin_footer.php'); ?>

Идеята е простичка. Въвеждат се данни проверяват се в authenticate метода, той пък връща обект, ако го има обекта, в session прави променливата, че е логнат и после пренасочва към index.php. Знам, че паролата не се хешира с умисъл засега е така. Проблемът е, че не пренасочва към index.php, а връща пак в login.php. Защо става така? Благодаря предварително :)
 
> user.php функцията find_by_sql.

Сигурен ли си, че тя връща обект, а не масив?

Защото в session::login ползваш $user като object.

$this->user_id = $_SESSION['user_id'] = $user->id;

Във функцията сложи var_dump($user); и кажи дали реално излизат резултатите.
 
1. Нямаш session_start();
2. Имаш текст над ob_start();
3. Поставяй двете веднага след <?php

и пробвай отново.

Причината да те праща в логин, е че потребителят реално не е влязъл.
 

Горе