2009-02-14 6 views
0

Pour une raison quelconque, la connexion à mon site doit être effectuée deux fois pour fonctionner. Si quelqu'un a une idée de pourquoi je l'apprécie.Je dois me connecter deux fois

Voici le code que j'ai l'autorisation:

<?php 
session_start(); 
require_once($_SERVER['DOCUMENT_ROOT'].'/config.php'); 
require_once(SITE_ROOT.'includes/exceptions.php'); 
require_once(SITE_ROOT.'data/model.php'); 

/* 
* The purpose of this class is to manage 
* access to the application, making sure the 
* users are logged in before they can access 
* certain features 
*/ 

class Auth extends Model 
{ 
    function isUserLoggedIn() 
    { 
     /* 
     * Check for the user_id in $_SESSION 
     * and see if it's the database. Return 
     * true or false 
     * 
     */ 

     if(isset($_SESSION['user'])) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

    } 

    static function redirectToLogin() 
    { 
     header("location: http://". DOMAIN .APP_DIR . "index.php?action=login"); 
    } 

    static function redirectToMain() 
    { 
     header("location: http://". DOMAIN . APP_DIR . "index.php?action=main"); 
    } 

    static function login($user) 
    { 
     /* 
     * Authenticate the user passing to the function 
     * a instance of the User object 
     */ 

     try 
     { 
      $db = parent::getConnection(); 
      $pass = $user->getPassword(); 
      $query = "select username, password from users where username = '".$user->getUsername()."' and password = '".$user->getPassword()."'"; 
      $results = $db->query($query);    

      if(empty($results)) { 
       throw new Exception('There was a problem logging you in', EX_LOGIN_ERROR); 
      }    

      $row = $results->fetch_assoc();   

      $user = $row['username']; 
      $_SESSION['user'] = $user; 

     } 
     catch(Exception $e){ 
      throw $e; 
     } 
    } 

    static function logout() 
    { 
     $old_user = $_SESSION['user']; 
     unset($_SESSION['user']); 
     session_destroy(); 
    } 

} 
?> 

Thx

+0

Essayez d'actualiser la page après la première connexion (ne PAS REPOSER les données, appuyez simplement sur ENTRER dans la barre d'adresse). Est-ce qu'il vous connecte? Si oui, votre bug est ailleurs (probablement dans votre contrôleur). – strager

Répondre

4

J'écoute @strager que votre code, de mon exerience PHP limité, ne semble pas montrer quoi que ce soit cela causerait l'erreur. Bien que je ne peux pas aider, mais offrir des refactorisations simples sans rapport avec votre question, mais il serait juste faire me sentir mieux:

<?php 
    session_start(); 
    require_once($_SERVER['DOCUMENT_ROOT'].'/config.php'); 
    require_once(SITE_ROOT.'includes/exceptions.php'); 
    require_once(SITE_ROOT.'data/model.php'); 

    /* 
    * The purpose of this class is to manage 
    * access to the application, making sure the 
    * users are logged in before they can access 
    * certain features 
    */ 

    class Auth extends Model 
    { 
     function isUserLoggedIn() 
     { 
      /* 
      * Check for the user_id in $_SESSION 
      * and see if it's the database. Return 
      * true or false 
      * 
      */ 

      return isset($_SESSION['user']); 
     } 

     static function redirectToLogin() 
     { 
      header("location: http://". DOMAIN .APP_DIR . "index.php?action=login"); 
     } 

     static function redirectToMain() 
     { 
      header("location: http://". DOMAIN . APP_DIR . "index.php?action=main"); 
     } 

     static function login($user) 
     { 
      /* 
      * Authenticate the user passing to the function 
      * a instance of the User object 
      */ 

      $db = parent::getConnection(); 
      $pass = $user->getPassword(); // replaced getPassword in the query with this variable, else there is no need to set it here. 
      $query = "select username, password from users where username = '".$user->getUsername()."' and password = '".$pass."'"; 
      $results = $db->query($query);    

      if(empty($results)) { 
       throw new Exception('There was a problem logging you in', EX_LOGIN_ERROR); 
      }    

      $row = $results->fetch_assoc();   
      $_SESSION['user'] = $row['username']; 

      // Why bother surrounding with try...catch just to throw the same exception 
     } 

     static function logout() 
     { 
      // what is $old_user used for? I can't see it set as a global variable anywhere 
      $old_user = $_SESSION['user']; 
      unset($_SESSION['user']); 
      session_destroy(); 
     } 

    } 
    ?> 
+0

Merci Dude c'est en fait quelqu'un d'autre code et j'essaie de comprendre pour le faire fonctionner. – jcslzr

+0

J'ai corrigé ce que tu m'avais dit et maintenant ça marche, merci – jcslzr

+0

Je me sentirais mieux si la page de connexion utilisait une URL sécurisée (ou au moins postée sur un). – tvanfosson

1

Il est tout simplement pas assez de code pour nous à la broche point une erreur. Le problème est probablement lié à la conception de votre site où les informations sur votre statut de connexion sont envoyées AVANT que la connexion ne soit traitée. Si non, alors je ne sais pas ce qui ne va pas compte tenu de cette information.

0

Il semble que votre question est déjà répondu, mais le problème peut également se produire si vous les réoriente automatiquement par exemple serveur web:

yourdomain.com

à

www .votredomaine.com

ou l'inverse.

+0

J'ai eu le même problème et je l'ai corrigé et ce n'était pas dû à une redirection. – Yamiko

+0

@yamikoWebs lire la réponse: 'peut aussi se produire ' – jeroen

0

n'est pas causée par une redirection. Session_start() doit TOUJOURS être utilisé avant de définir ou de recevoir des variables de session. Il doit être dans la méthode de classe.

Questions connexes