Не работает сессия при логине,не могу понять почему ?

So-cold

Новичок
Создал класс сессию
PHP:
<?php
namespace Modules;
class Session
{
    private $logged_in = false;
    public $user_id;

    //Session start and check logged in
    public function __construct()
    {
        session_start();
        $this->checkLogin();
        if ($this->logged_in) {
            // actions to take right away if user is logged in
        } else {
            // actions to take right away if user is not logged in
        }
    }

    //session destroy
    public function __destruct()
    {
        session_destroy();
    }

    // Check if User log in
    public function isLoggedIn()
    {
        return $this->logged_in;
    }//true

    //check if some one log in from page
    public function login($user)//true
    {
        // database should find user based on username/password
        if ($user) {
            $this->user_id = $_SESSION['user_id']=$user->id ;
            $this->logged_in = true;
        }
    }

    //unset out user_id
    public function logout()//true
    {
        unset($_SESSION['user_id']);
        unset($this->user_id);
        $this->logged_in = false;
    }
    // check for user_id accept
    private function checkLogin()
    {
        if (isset($_SESSION['user_id'])) {
            $this->user_id = $_SESSION['user_id'];
            $this->logged_in = true;
        } else {
            unset($this->user_id);
            $this->logged_in = false;
        }
    }//true
}
Страница логина
PHP:
<?php
require_once ('../../vendor/autoload.php');
require_once ('../../includes/functions.php');
$session= new \Modules\Session();
$database= new \Modules\MySqlDatabase();
$object= new \Modules\User();
if($session->isLoggedIn()) {
    redirect_to("index.php");
}

// Remember to give your form's submit tag a name="submit" attribute!
if (isset($_POST['submit'])) { // Form has been submitted.

    $username = cleanStr($_POST['username']);
    $password = cleanStr($_POST['password']);

    // Check database to see if username/password exist.
    $found_user = $object->authenticate($username, $password);

    if ($found_user) {
        var_dump($session->login($found_user));
        redirect_to("index.php");
    } else {
        // username/password combo was not found in the database
        $message = "Username password are incorrect.";
    }

} else { // Form has not been submitted.
    $username = "";
    $password = "";
}
Собственно , с бд все нормально проходит. Перехожу на страницу но выводит NULL:
PHP:
var_dump($session->login($found_user));
И если я не закоментирую обратный редирект с закрытой страницы, меня вечно редиректит назад на логин
Стр. куда иду после ввода логина и после чего реконектит назад:
PHP:
require_once ("../../vendor/autoload.php");
require_once ("../../includes/functions.php");
$session = new \Modules\Session();
var_dump($session->isLoggedIn());
if (!$session->isLoggedIn()) { redirect_to("login.php"); }
?>
 

So-cold

Новичок
ну вот, а тьі говорил что с БД данньіе пришли
Из БД данные приходят (проверял) выше в коде , после этого все нормально работает перенаправляет в закрытую страницу. Но проблема в том что не работает сессия, не понятно почему.
 

Vano

Новичок
PHP:
  $found_user = $object->authenticate($username, $password);
    var_dump($found_user);
//string(1) "6"
Собственно поле id- логина что я ввожу
что поле id?) дай полную распечатку var_dump'a ($found_user) - я так понимаю у обьекта нету аттрибута "id" которьій тьі пробуешь записать в $_SESSION['user_id'}
 

So-cold

Новичок
  1. Проблема скорее всего в этом куске кода , но я не могу понять что я не так делаю
    PHP:
    [/LIST]
    [LIST=1]
    [LIST=1]
    [*]   public function login($user)//true
    [*]    {
    [*]        // database should find user based on username/password
    [*]        if ($user) {
    [*]            $this->user_id = $_SESSION['user_id']=$user->id ;
    [*]            $this->logged_in = true;
    [*]        }
    [*]    }
    [/LIST]
 

Andkorol

Новичок
Включи вывод ошибок, иначе это не debug – а слепое тыканье в код палкой.
PHP:
  $found_user = $object->authenticate($username, $password);
    var_dump($found_user);
//string(1) "6"
У тебя в login приходит строка "6" – а ты из неё пытаешься, как из объекта, получить атрибут id.
На этом и валится твой код.
 

Vano

Новичок
ок я понял, оказивается var_dump($found_user) дал string 6, тогда перепиши login method
PHP:
if ($user) {
            $this->user_id = $_SESSION['user_id'] = $user ;
            $this->logged_in = true;
        }
Но тьі должен понимать что такое Аттрибут Обьекта ($user->id) а что такое просто строка ($user string(1) "6")
 

So-cold

Новичок
ок я понял, оказивается var_dump($found_user) дал string 6, тогда перепиши login method
PHP:
if ($user) {
            $this->user_id = $_SESSION['user_id'] = $user ;
            $this->logged_in = true;
        }
Но тьі должен понимать что такое Аттрибут Обьекта ($user->id) а что такое просто строка ($user string(1) "6")
Включи вывод ошибок, иначе это не debug – а слепое тыканье в код палкой.

У тебя в login приходит строка "6" – а ты из неё пытаешься, как из объекта, получить атрибут id.
На этом и валится твой код.
Да я уже понял вроде где я накосячил.
Исправил
$data = $stmt->fetchAll(PDO::FETCH_CLASS, $class);
Теперь возвращает вот:
PHP:
echo  "<pre>";
    var_dump($found_user) ;
//////////////
object(Modules\User)#7 (5) {
  ["id"]=>
  string(1) "6"
  ["username"]=>
  string(4) "Alex"
  ["password"]=>
  string(6) "123qwe"
  ["first_name"]=>
  string(3) "wow"
  ["last_name"]=>
  string(3) "wow"
}

// А это
var_dump($found_user->id)
//string(1) "6"
Но все равно не работает
 

Andkorol

Новичок
Вывод ошибок включил?
А, ну и деструктор убери – он тебе не нужен.
 

So-cold

Новичок
Вывод ошибок включил?
Да пишет что ошибок нет, а в
PHP:
var_dump($session->login($found_user));
//null
В самом методе:
Код:
   public function login($user)//true
    {
        // database should find user based on username/password
        /*if ($user) {
            $this->user_id = $_SESSION['user_id']=$user->id ;
            $this->logged_in = true;

        }*/
        return $user->id;
    }
Так возвращает число, но если пытаюсь присвоить пишет NULL
 
Сверху