Connexion Auto avec COOKIE PHP

Bonjour,
J'ai souhaité refaire un autre post beaucoup mieux explicatif concernant mon problème.
Je souhaite créer une re-connexion automatique avec COOKIE afin que le membre soit redirigé automatiquement sur son compte si il a coché la case se souvenir de moi lors de ça première connexion.
Mon fichier connexion.phpfait appel à une class et une méthode pour que le membre soit connecté, avec une fonction SESSION également et aussi une fonction qui crypte le pseudo et le password.
Si toutes les conditions sont bonnes et qu'il a coché la case, le COOKIE est créé.
L'utilisateur est reconnu en tant que membre jusqu'à là il n'y a pas de problème.
connexion.php
if(isset($_POST['pseudo']) && isset($_POST['password'])) {

	$pseudo   	= isset($_POST['pseudo']) ? Security::clean($_POST['pseudo']) : '';
	$password	= isset($_POST['password']) ? Security::clean($_POST['password']) : '';
	$actif		= isset($_POST['actif']) ? $_POST['actif'] : '';

	$connexion = new Connexion_class($pseudo, $password, $actif);
	$verif = $connexion->VerifConnexion();
	    
	if($verif == 'success') {
		
		if(isset($_POST['remember'])) {
			$LoginPassword = Security::crypt($pseudo) . '_' . Security::crypt($password);
			setcookie('moncookie', $LoginPassword, time() + 3600 * 24 * 365, null, null, false, true);
		}
		
		header('Location: index.php?body=compte_profil&type=compte');
	
	} else {
		$erreur[] = $verif;
	}
}
if (isset($erreur)) {
	echo output_errors($erreur);
}

Ensuite je souhaiterai que le COOKIE créé authentifie le membre afin qu'il soit redirigé directement sur son compte.
j'ai créé une page init.php qui est appelé par toutes les pages et sur la page index.php il y a la fameuse fonction session_strart();
Au niveau des includes tout est fait normalement.
Dans ce fichier je fait appel à une fonction qui décrypte le pseudo et le password.
Une dernière info le COOKIE est bien créé et reste créé tant que je ne me déconnecte pas, et à l'ouverture à nouveau du site je ne suis pas reconnu en tant que membre je suis obligé de me reconnecter malgrès la présence du COOKIE.
Mon problème viendrait uniquement de cette page, si vous pouvez me donner votre aide s'ils vous plait, il y a vraiment beaucoup de jour que je suis dessus.
Merci encore
init.php
if(isset($_COOKIE['moncookie'])) {
	$LoginPassword = explode("_",$_COOKIE['moncookie']);
	
	$pseudo   	= isset($_POST['pseudo']) ? Security::clean($_POST['pseudo']) : '';
	$password	= isset($_POST['password']) ? Security::clean($_POST['password']) : '';
	$actif		= isset($_POST['actif']) ? $_POST['actif'] : '';

	if(is_array($LoginPassword)) {
			$pseudo 	= Security::decrypt($LoginPassword[0]);
			$password 	= Security::decrypt($LoginPassword[1]);
			
		$connexion = new Connexion_class($pseudo, $password, $actif);
		$verif = $connexion->VerifConnexion();	

		if($verif == 'success') {
			header('Location: index.php?body=compte_profil&type=compte');
		}
	}
}

12 réponses

  1. Contributeur
    'lut, dans init.php tu sembles vérifier la présence de paramètres
    $_POST
    alors qu'il n'y a pas besoin: le cookie sera présent généralement quand on ne passe pas par le formulaire de connexion, d'autant plus qu'après tu les "effaces" (par un nouveau scope de variables) avec les valeurs du cookie.

    Autrement, j'ai eu un peu de mal à saisir ton problème, mais j'ai compris. Est-ce qu'au moins le code que tu as écrit pour l'autologin est exécuté? Teste avec des
    echo
    de debug par exemple.
    Car ton code semble correct et fonctionnel pourtant...
    1. Bonjour
      Merci pour ta réponse, je vais essayé quelque chose car je crois que tu m'a mis la puce à l'oreille, je vais tester ça ce soir.
      Merci je te tiens au courant.
      1. bonjour,
        je reviens vers toi désespérément.
        Je n'arrive pas à résoudre mon problème de COOKIE pour la reconnexion automatique.
        Avec une petite modif de ce fichier je suis redirigé vers la page compte_profil du moins l'URL mais la page me spécifie "La page n'est pas redirigée correctement".
        Pourrai tu s'il te plait m'aider un peu si tu as le temps, dis moi si tu aurai besoin de mon fichier de class.
        Je te remercie
        page
        init.php
        if(isset($_POST['pseudo']) && isset($_POST['password'])) {
        
        	$pseudo   	= isset($_POST['pseudo']) ? Security::clean($_POST['pseudo']) : '';
        	$password	= isset($_POST['password']) ? Security::clean($_POST['password']) : '';
        	$actif		= isset($_POST['actif']) ? $_POST['actif'] : '';
        
        	$connexion = new Connexion_class($pseudo, $password, $actif);
        	$verif = $connexion->VerifConnexion();
        	    
        	if($verif == 'success') {
        		
        		if(isset($_POST['remember'])) {
        			$LoginPassword = Security::crypt($pseudo) . '_' . Security::crypt($password);
        			setcookie('cliquedecruet', $LoginPassword, time() + 3600 * 24 * 365, null, null, false, true);
        		}
        		
        		header('Location: index.php?body=compte_profil&type=compte');
        	
        	} else {
        		$erreur[] = $verif;
        	}
        }
        

        la page connexion.php est plus haute rien n'est changé, je pense vraiment que cela viens de la page init.php
        1. Contributeur
          Le problème ici est que tu fais une redirection en boucle: le cookie étant présent, chaque page que tu consultes, y compris celle sur laquelle tu rediriges, te fera l'autologin et donc la redirection. Il faut donc ajouter la non-connexion comme impératif dans ta condition
          if
          .
      2. Bonjour
        C'est pas possible j'ai envoyé la mauvaise page en fait, veuillez m'excuser, je vous envoie mes 2 page
        page connexion.php
        if(isset($_POST['pseudo']) && isset($_POST['password'])) {
        
        	$pseudo   	= isset($_POST['pseudo']) ? Security::clean($_POST['pseudo']) : '';
        	$password	= isset($_POST['password']) ? Security::clean($_POST['password']) : '';
        	$actif		= isset($_POST['actif']) ? $_POST['actif'] : '';
        
        	$connexion = new Connexion_class($pseudo, $password, $actif);
        	$verif = $connexion->VerifConnexion();
        	    
        	if($verif == 'success') {
        		
        		if(isset($_POST['remember'])) {
        			$LoginPassword = Security::crypt($pseudo) . '_' . Security::crypt($password);
        			setcookie('cliquedecruet', $LoginPassword, time() + 3600 * 24 * 365, null, null, false, true);
        		}
        		
        		header('Location: index.php?body=compte_profil&type=compte');
        	
        	} else {
        		$erreur[] = $verif;
        	}
        }
        

        Cette page de connexion fonctionne bien

        page init.php
        if(!isset($_SESSION['id_adherent']) && isset($_COOKIE['cliquedecruet'])) {
            $values = Security::clean($_COOKIE['cliquedecruet']);
            $values = explode('_', $values);
        
        	if(count($values) == 2) {
        		$pseudo = Security::decrypt($values[0]);
        		$password = Security::decrypt($values[1]);
        
        		$actif = isset($_POST['actif']) ? $_POST['actif'] : '';
        
        		$LoginPassword = new Connexion_class($pseudo, $password, $actif);
        
        		if($LoginPassword->VerifConnexion()) {
        			header('Location: index.php?body=compte_profil&type=compte');
        			exit();
        		}
        		
        	} else {
        		$erreur[] =  'Le Cookie est invalide';
        	}
        }
        

        C'est cette page qui pose problème je pense.
        Merci à vous
        1. Contributeur
          C'est cette page qui pose problème je pense.
          OK, mais quel est le problème maintenant???
      3. Bonjour
        Je n'ai pas pu résoudre mon soucis avez-vous une idée, une infos à me donner. Comme je l'ai dit au niveau de ma connexion il n'y a pas de problème, mais lorsque je coche la case se souvenir de moi le COOKIE est bien créé et lorsque je ferme le navigateur et que je l'ouvre de nouveau le COOKIE est toujours présent.
        Merci beaucoup de votre aide.
        1. Bonjour
          Mon soucis c'est que ma page est redirigé à l'adresse du compte c'est à dire ici
          header('Location: index.php?body=compte_profil&type=compte');
          

          mais elle ne s'affiche pas cema me met
          La page n'est pas redirigée correctement

          Pourtant l'URL est la bonne adresse.
          Merci
          1. Contributeur
            Ça fait encore une redirection en boucle? As-tu mis la bonne condition pour l'autologin, à savoir (CookiePrésent ET NON Connecté)?
        2. Bonjour
          Je ne comprends pas sur ma page init.php la condition est bien si la SESSION n'existe pas et le COOKIE est bien présent.
          1. Contributeur
            Si tu utilises Chrome/Chromium ou Firefox, ouvre les outils développeur avec Ctrl+Shift+I, va dans l'onglet réseau, et recharge ta page. Y a-t-il plein de requêtes ou une/deux? Quelles en sont les en-têtes Header (visibles quand on clique dessus)?
        3. j'ai bien ouvert l'onglet réseau, excuse moi je ne vois pas ce que tu veux dire par:
          Quelles en sont les en-têtes Header (visibles quand on clique dessus)?
          il y a entete de la réponse
          entete de la requete

          Merci de ton aide
          1. Contributeur
            En-têtes de la réponse
        4. entete de réponse il y a
          Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
          Connection: Keep-Alive
          Content-Type: text/html; charset=utf-8
          Date: Tue, 17 Feb 2015 11:25:08 GMT
          Expires: Thu, 19 Nov 1981 08:52:00 GMT
          Keep-Alive: timeout=5, max=100
          Pragma: no-cache
          Server: Apache/2.2.17 (Win32) PHP/5.3.4
          Transfer-Encoding: chunked
          X-Powered-By: PHP/5.3.4
          
          1. Contributeur
            Étrange, il n'y a pas de redirection!
        5. je n'était pas sur la bonne page en fait

          Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
          Connection: Keep-Alive
          Content-Length: 6
          Content-Type: text/html; charset=utf-8
          Date: Tue, 17 Feb 2015 11:33:07 GMT
          Expires: Thu, 19 Nov 1981 08:52:00 GMT
          Keep-Alive: timeout=5, max=100
          Location: index.php?body=compte_profil&type=compte
          Pragma: no-cache
          Server: Apache/2.2.17 (Win32) PHP/5.3.4
          X-Powered-By: PHP/5.3.4
          
          1. je viens de modifier mon fichier init.php et alors la page n'est pas redirigée par contre le COOKIE existe toujours.
            if(!isset($_SESSION['id_adherent']) && isset($_COOKIE['cliquedecruet'])) {
                $values = Security::clean($_COOKIE['cliquedecruet']);
                $values = explode('_', $values);
            
            	if(count($values) == 2) {
            		$pseudo = Security::decrypt($values[0]);
            		$password = Security::decrypt($values[1]);
            
            		$actif = isset($_POST['actif']) ? $_POST['actif'] : '';
            
            		$LoginPassword = new Connexion_class($pseudo, $password, $actif);
            		$verif = $LoginPassword->VerifConnexion();
            
            		if($verif == 'success') {
            			header('Location: index.php?body=compte_profil&type=compte');
            			exit();
            		}
            		
            	} else {
            		$erreur[] =  'Le Cookie est invalide';
            	}
            }
            

            Merci
            1. Bonjour,
              Toujours avec mon problème de COOKIE pour la reconnexion automatique.
              Je n'arrive pas à comprendre pourquoi cela ne fonctionne pas.
              Si vous pouvez m'aider, je serai très content de pouvoir mettre en place cet autologin.
              Merci beaucoup.