IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Session qui ne dure pas


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Points : 760
    Points
    760
    Par défaut Session qui ne dure pas
    Bonjour,

    je rencontre un soucis que j'ai vraiment du mal à caractériser...

    Sur le site que je développe, je gère des types de connexion utilisateur :
    • Connexion par login classique
    • Connexion par cookie



    Pour le premier, aucun soucis, tout marche comme je le souhaite, pour le second, c'est là que ça se corse.

    J'explique mon soucis :
    Dès que j'arrive sur le site, mon cookie est bien détecté, et ma connexion s'effectue correctement.
    A ce moment là, ma session USER contient l'ID et l'IP de l'user.

    Dès que je change de page, ma session est de nouveau vide, et je dois repassé par l’authentification par cookie pour récupérer ma session, ce qui n'est pas le fonctionnement normal.
    Je n'arrive pas à comprendre pourquoi, alors que ma session contient bien les bonnes données, celles-ci ne sont pas gardées lors d'un changement de page.


    Pour info, la seule différence entre les deux méthode de connexion réside uniquement dans l’obtention des infos users de la BDD, sinon c'est identique.

    J'en appel donc à votre savoir, si quelqu'un a une piste à me donner....

    Merci.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Un peu de code à nous montrer ?
    Tu as bien les session_start partout ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Points : 760
    Points
    760
    Par défaut
    Pour expliquer un peu comme je fonctionne.

    Toutes mes pages passent par la page index.php

    Au tout début de cette page, je lance un session_start().

    J'inclue ensuite mes classes et mon fichier de gestion de session que voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
    var_dump(session_id());
    var_dump($_SESSION);
    	/* Vérification de la session */
    	if(!isset($_SESSION['USER']['id']) OR !is_array($_SESSION['USER'])) {
    		/* Gestion des cookies Si pas de session active */
    		if(isset($_COOKIE[$VARS['COOKIENAME']])) {
    			if(!$ObjUSER->ConnectByCookie($_COOKIE[$VARS['COOKIENAME']]))
    				$ObjUSER->Logout();
    			else
    				echo "UpdateByCookie";
    		}
    	}
    	elseif(isset($_SESSION['USER']['id'])) {
    		/* Vérification timeout session */
    		if($_SESSION['timeout'] < time() - SESSUSER) {
    			$ObjUSER->Logout();
    			header("Location: ".$VARS['URL']."?timeout");
    		}/* Vérification changement d'IP */
    		elseif($_SESSION['USER']['IP'] != $_SERVER['REMOTE_ADDR']) {
    			$ObjUSER->Logout();
    			header("Location: ".$VARS['URL']."?ip");	
    		}			
    		else	
    			$_SESSION['timeout'] = time();
     
    		/* On actualise la session */
    		$ObjUSER->UpdateSession($_SESSION['USER']['id']);
     
    		/* On actualise le cookie si il existe */
    		if(isset($_COOKIE[$VARS['COOKIENAME']]))
    			$ObjUSER->UpdateCookie($Mysqli->UncryptValue($ObjUSER->USER['Email']));
     
    	}
    var_dump($_SESSION);
    ?>
    Voici le code de ma connexion par cookie :

    Je décrypte le contenu du cookie et je vérifie si il correspond à un enregistrement dans ma BDD
    Si oui, je recupere l'ID de l'USER et je récupere ses infos.
    Puis je stock l'ID et l'IP dans la session.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public function ConnectByCookie($Key) {
    			$Key = $this->_Mysqli->UncryptValue($Key);
    			$Values = explode("_",$Key);
     
    			$Query = "SELECT `value1` FROM `".$this->_auth."` WHERE 
    																`value2` = '".$this->_Mysqli->CryptValue($Values[0])."' AND 
    																`value3` = '".$this->_Mysqli->CryptValue($Values[1])."' AND 
    																`value4` = '".$this->_Mysqli->CryptValue($Values[2])."' AND 
    																`value5` = '".$this->_Mysqli->CryptValue($Values[3])."' ;";
    			$ID = $this->_Mysqli->GetUniqueResult($Query);
    			if($ID) {
    				$USER = $this->Get('id',$this->_Mysqli->UncryptValue($ID));				
    				if(is_array($USER)) {
    					$_SESSION['USER']['id'] = $USER['id'];	
    					$_SESSION['USER']['IP'] = $_SERVER['REMOTE_ADDR'];	
    					$_SESSION['timeout'] = time();	
     
    					$this->UpdateCookie($this->_Mysqli->UncryptValue($USER['Email']));	
     
    					$this->UpdateSession($USER['id']);
    					return true;
    				}
    				else
    					return false;
    			}
    			else
    				return false;
    		}
    Mon code UpdateSession, qui actualise l'IP et la connexion, récupérer le profil utilisateur et régénère un ID de session (j'ai desactiver ce paramètre en attendant de résoudre le soucis).
    Ce code est utilisé également lors d'un connexion par login et MDP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public function UpdateSession($ID) {
    			$this->Update($ID, "Connexion", time());
    			$this->Update($ID, "IP", $_SERVER['REMOTE_ADDR']);
    			$this->USER = $this->Get('id',$ID);
    			Class_Profil::getInstance()->GetProfil($ID, $this->USER['TypeCompte'], true);
    			//session_regenerate_id();
    			return true;
    		}
    Le premier var_dump est toujours vide, le second contient toujours les bonnes infos et j'ai toujours UpdateByCookie qui s'affiche.
    et le session_id me donne toujours un numéro différent en me connectant par cookie mais reste unique en me connectant par login mot de passe.

    Il va me rendre fou ce problème !


    EDIT: Un miracle s'est produit, tout fonctionne parfaitement à présent, je n'ai pourtant rien modifier à ce niveau...

    Le mystère reste entier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/09/2007, 09h23
  2. Réponses: 5
    Dernier message: 08/08/2007, 12h35
  3. variables de sessions qui ne restent pas
    Par seb67110 dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2007, 11h54
  4. variables de session qui ne passent pas
    Par cels dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 28/11/2006, 10h46
  5. [Sécurité] Session qui ne fonctionne pas!!!!
    Par philippef dans le forum Langage
    Réponses: 5
    Dernier message: 27/10/2005, 17h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo