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 :

probleme de session ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut probleme de session ?
    Bonsoir,

    je n'arrive pas récupérer la session après une redirection.
    j'ai un formulaire identifiant, quand je clique sur se connecter,
    j'ai une autre script qui vérifie si le membre existe et quoi qu'il arrive
    je devrais revenir à mon index et récupérer la session de l'objet membre
    mais il n'est pas là

    voici le script

    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
     
     
    require_once 'Bdd.php';
    //echo "session";
    //print_r($_SESSION['membre']); 
    if(isset($_SESSION['membre']))
    {
            print_r($_SESSION['membre']);
    }
    else
    {
    //*******************************HEADER ************************************
    $html = new Html('Page Accueil');
    $form_identifiant = new FormAnnuaire('verif.php','connexion','identifiez-vous avec votre email et mot de passe');
    $form_identifiant->getFormIdentifiant();//affiche champ email et
    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
     
     
    <?php
    //Bdd.php
    session_start();
     
    class Bdd {
     
        public static function getIntance() {
            try {
                $instance = new PDO('mysql:host=localhost;dbname=membre', 'root', '');
            } catch (PDOException $e) {
                echo 'Erreur : ' . $e->getMessage() . '<br/>';
                echo 'N° : ' . $e->getCode() . '<br/>';
            }
     
            return $instance;
        }
     
    }
     
    //auto load ....
    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
     
    <?php
    //verif.php
    require'Bdd.php';
    extract($_POST);
    $membre = new Membre();
    $membre->isMembreExist($email,$pass);
    $_SESSION['membre'] = $membre;
     
    print_r($_SESSION['membre']);
     
    echo $membre->getMembreExist();
     header('Location: index.php');
     
    ?>
    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
    37
    38
    39
    40
    41
    42
    43
     
     
    <?php
     
    require_once 'Bdd.php';
     
    class Membre {//classe qui permet d'enregister les infos de chaque membres
     
        private $bdd;
        private $id_membre; //permet de rechercher les relions en fonction des tables
        private $email;
        private $pass;
        private $civilite;
        private $nom;
        private $prenom;
        private $telephone;
        private $adresse; 
        private $membre_exist = NULL;
     
        public function __construct() {
            $this->bdd = bdd::getIntance();
        }
     
        public function  getMembreExist()
        {
            return $this->membre_exist;
        }
     
        public function isMembreExist($email, $pass) {//vérifi s'il existe
            $this->email = $email;
            $this->mdp = $pass;
            $bdd = $this->bdd;
            $query = 'SELECT * FROM membre WHERE pass=:pass';
            $prep = $bdd->prepare($query);
            $prep->bindValue(':pass', $pass, PDO::PARAM_STR);
            $prep->execute();
            $data = $prep->fetch();
            if(!empty($data['id'])
            {
              $this->membre_exist= TRUE;
             }
     
        }
    normalement si je valide mon formulaire poste,
    je devrais avoir la session membre, mais l'index ne récupère pas la session.

    ou est mon erreur ? (je n'ai pas d'erreur avec champ login et passe)
    merci d'avance pour la réponse

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Faut mettre session_start(); dans tous tes scripts (que ce soit pour lire ou pour écrire dans une variable de session, bref avant toute utilisation des variables de session).

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    merci abciweb mais
    j'appelle ceci pour tout mes fichiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    //Bdd.php
    session_start();
     
    class Bdd {
     
        public static function getIntance() {
            try {
                $instance = new PDO('mysql:host=localhost;dbname=membre', 'root', '');
            } catch (PDOException $e) {
                echo 'Erreur : ' . $e->getMessage() . '<br/>';
                echo 'N° : ' . $e->getCode() . '<br/>';
            }
    cela ne suffit pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    //Bdd.php
    session_start();//<= session start
     
    tour les fichiers commence par
     
    require('Bdd.php'); //j'inclus Bdd.php, j'ai donc appelle session start?

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    la règle de la session est simple : dans une chaîne d'exécution de scripts utilisant une session, il n'est nécessaire de déclarer l'ouverture de session que dans le premier script exécuté.
    Les scripts inclus (directement ou via un autoload) bénéficient automatiquement de la session.

    PS : pour que ta session récupère correctement ton membre, tu dois inclure la définition de ta classe avant de démarrer ta session.
    En l'occurrence, dans ton cas Bdd.php qui démarre la session ne connait pas la classe Membre

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    merci rawsrc

    donc pour la session c'est ok, mes fichiers peuvent utiliser les sessions,
    donc je ne peux pas cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['objet'] = new Objet();
    j'ai donc fait ce que tu m'a dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    require_once'../lib/Ini.php';
    extract($_POST);
    $membre = new Membre();
    $membre->isMembreExist($email,$pass);
    $_SESSION['membre']=  serialize($membre);
    il n'aime pas que je sérialize la session avec une instance de pdo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ( ! ) Fatal error: Uncaught exception 'PDOException' with message 'You cannot serialize or unserialize PDO instances' in C:\verif.php on line 7
    comment je peux faire ?? je vais devoir utiliser cela à chaque fois que je souhaite la connexion dans une méthode et ne pas le charger dans la connexion dans un attribut?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function quelqueChose()
    {
        $bdd =bdd::getIntance();
       //.....
    }
    il y a t'il un raccourcis pour que firefox détruise le cache lorsque je termines
    mon test sinon il n'est pas bon , je suis obligé de passé à chaque fois
    en connexion privé sinon mon test est faussé,
    j'aurai pu à la fin du script faire un unset session et destroy session mais
    c'est un peu long à la fin....

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Je t'ai dit une ânerie, pas réveillé, relis mon post, je l'ai corrigé, je vais aller me recoucher je crois )
    Le stockage en session serialize automatiquement les instances de classe.
    Il faut faire attention à ce que ta classe n'ait aucune variable référençant une ressource (c'est $this->$bdd qui pose problème)
    Au moment de déserializer, PHP doit connaitre l'implémentation de la classe Membre, c'est tout.

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

Discussions similaires

  1. Probleme de sessions avec un hébergeur
    Par totoranky dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2005, 02h36
  2. [Sécurité] Probleme de sessions
    Par perco dans le forum Langage
    Réponses: 4
    Dernier message: 05/10/2005, 11h04
  3. [VB.Net] Problème de Session
    Par theartist dans le forum ASP.NET
    Réponses: 7
    Dernier message: 09/09/2004, 16h06
  4. Problème de session sous Konqueror
    Par Escuzze dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 06/07/2004, 11h52
  5. [C#] Probleme de session
    Par alexischmit dans le forum ASP.NET
    Réponses: 2
    Dernier message: 26/04/2004, 16h33

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