Więc idąc po kolei, wysyłanie formularza wywołuje metodę run()
class Login extends Model { function __construct( ) { parent::__construct( ); $this->checkIfLoggedIn( ); } function run( $data ) { $sth = $this->db->prepare( 'SELECT `uID`, `uLogin`, `uPassword` FROM `users` WHERE `uLogin` = :login AND `uPassword` = :password' ); foreach ( $data as $key => $value ) { $sth->bindValue( ':' . $key, $value ); } $sth->execute( ); $data = $sth->fetchAll( PDO::FETCH_ASSOC ); { $_SESSION[ 'loggedIn' ] = 1; $_SESSION[ 'userID' ] = $data[ 0 ][ 'uID' ]; $_SESSION[ 'userLogin' ] = $data[ 0 ][ 'uLogin' ]; $_SESSION[ 'userPass' ] = $data[ 0 ][ 'uPassword' ]; } else { $_SESSION[ 'loggedIn' ] = 0; } } }
Klasa Model:
class Model { function __construct( ) { $this->db = new Database( ); } protected function checkIfLoggedIn( ) { { $_SESSION[ 'loggedIn' ] = 0; return false; } if ( $_SESSION[ 'loggedIn' ] == 0 ) { $_SESSION[ 'loggedIn' ] = 0; return false; } { $_SESSION[ 'loggedIn' ] = 0; return false; } { $_SESSION[ 'loggedIn' ] = 0; return false; } { $_SESSION[ 'loggedIn' ] = 0; return false; } if ( $this->getLoginFromDB( ) == false ) { $_SESSION[ 'loggedIn' ] = 0; return false; } } protected function getLoginFromDB( ) { $sth = $this->db->prepare( 'SELECT `uID`, `uLogin`, `uPassword` FROM users WHERE `uID` = :id AND `uLogin` = :login AND `uPassword` = :pass' ); ':id' => $_SESSION[ 'userID' ], ':login' => $_SESSION[ 'userLogin' ], ':pass' => $_SESSION[ 'userPass' ] ) ); $data = $sth->fetchAll( ); { return true; } return false; } }
A tutaj ostatnia klasa, Index, wykonuje funkcję index():
class Index extends Model { function __construct( ) { parent::__construct( ); $this->checkIfLoggedIn( ); } function index( ) { if ( $_SESSION[ 'loggedIn' ] != 0 ) { // wykonuj } else { return false; } } }
I teraz nie wiem w czym polega problem, bo logika działania jest OK (każdy krok wykonywałem po kolei, przerywając wykonywanie skryptu i działało, ale jak już puszczę całość to się wysypuje). session_start() jest wywoływane na początku pliku index.php (innymi słowy: jest wykonywane zawsze).
Wiecie może jak zaradzić traceniu sesji?