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 :

[POO] Stockage en variable de session d'un objet


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 139
    Points
    139
    Par défaut [POO] Stockage en variable de session d'un objet
    Bonjour

    Je me pose une question fondamentale pour un dév :

    J'ai essayé lors de ce développement de stocker dans une variable de session une valeur de type #ressource (genre retour de requête mySQL).

    Cela ne fonctionnait pas ou aléatoirement et j'ai cru comprendre au fil de certaines lectures que les variables de session étaient sérializées donc j'ai abandonné.

    La question : Est il possible de stocker en variable de session un tableau contenant une variable de type #object typiquement les valeurs d'une classe ?

    Car apparemment cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class toto() {} .... 
     
    $mesvaleurs = new toto() ; 
     
    $tableau[ 1 ] = serialize($mesvaleurs) ; 
     
    et au retour :
     
    $mavaleur_attendue = unserialize($tableau[ 1 ]) ;
    Cela vous semble-t-il conventionnel ?

    Merci

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 18
    Points
    18
    Par défaut
    Bonjour Delete.

    Dans les variables de session, on peut effectivement stocker des informations qui sont sérialisées. Il est possible de sérialiser un tableau, quel que soit son contenu, y compris des instances de classes. Ainsi, tu peux créer un tableau rempli d'objets, le sérialiser et le mettre dans une variable de session. Les objets seront réutilisables une fois le tableau déserialisé en y accédant de manière classique. Si tu n'as qu'un seul objet à mettre dans une variable de session, autant sérialiser directement l'objet lui même plutôt que de le mettre dans un tableau.

    Prenons une classe quelconque :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
        class MaClasse{
            var $foo;
        }
    ?>

    Maintenant voyons voir ce qu'on peut en faire :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
        session_start();
        // On instancie notre classe et on y met une valeur
        $objet = new MaClasse();
        $objet->foo = "texte blabla";
     
        // On crée un tableau avec notre objet dedans
        $tab = array("monObjet" => $objet);
     
        // On met le tableau sérialisé dans une variable de session
        $_SESSION['monTableau'] = serialize($tab);
    ?>
    Et maintenant depuis un autre script :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
        session_start();
        // On récupère notre tableau
        $nouveauTab = unserialize($_SESSION['monTableau']);
     
        // On peut réutiliser notre objet
        $nouvelObjet = $nouveauTab["monObjet"];
     
        // Affichage de "texte blabla"
        echo $nouvelObjet->foo;
    ?>

    Pour répondre à ta dernière question "est-ce conventionnel?", mettre un tableau dans une variable de session ne me choque pas.

    En espérant avoir répondu à ta question.


  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 222
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 222
    Points : 8 468
    Points
    8 468
    Billets dans le blog
    17
    Par défaut
    A noter que le gestionnaire de sessions PHP se débrouille tout seul pour transmettre les objets. Pas besoin de les dé/linéariser nous-même. Dans le cadre d'instances il faut juste s'assurer que la classe est correctement définie dans le script cible.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    J'ai essayé lors de ce développement de stocker dans une variable de session une valeur de type #ressource (genre retour de requête mySQL).

    Cela ne fonctionnait pas ou aléatoirement et j'ai cru comprendre au fil de certaines lectures que les variables de session étaient sérializées donc j'ai abandonné.
    Ce qu'il faut surtout préciser, c'est que les ressources sont non sérializable ! Une ressource est un processus, un lien, une valeur qui ne peut vivre au delà de la durée de vie du processus php -=> la requête web -=> page.


    http://www.php.net/manual/fr/languag...s.resource.php
    http://www.php.net/manual/fr/resource.php

  5. #5
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par Drakulo Voir le message
    mettre un tableau dans une variable de session ne me choque pas.
    Salut

    Cool merci à toi et à tous, je comprends mieux et cela réponds à plusieurs questions à mes problèmes.

    Une de mes dernières interrogations est : Quelle est la limite de taille d'un tableau et de son contenu en variable de session, la question étant complémentaire et intrinsèquement liée.

    J'imagine qu'il y a un paramètre dans php.ini...


  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 222
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 222
    Points : 8 468
    Points
    8 468
    Billets dans le blog
    17
    Par défaut
    Pas de limite intrinsèque, les données étant stockées dans un fichier.

  7. #7
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Pas de limite intrinsèque, les données étant stockées dans un fichier.
    J'en apprends encore une, merci (ce que j'ai vérifié par ailleurs, sorry...)

    Mais quand même il n'y a pas de limites en variables de session ? j'imagine par exemple un site très consulté avec un /tmp (ou autre) limité, on aurait un overflow ... non ?

    Ceci m'incitera certainement à consulter les topics sur les optimisation PHP pour les variables de session et leurs limites ...

    En tout cas merci.

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 16/05/2007, 16h53
  2. variable de session dans un objet
    Par ben53 dans le forum Langage
    Réponses: 4
    Dernier message: 24/01/2007, 17h51
  3. [POO] Stockage de référence objet en session
    Par starn2000 dans le forum Langage
    Réponses: 4
    Dernier message: 26/07/2006, 15h35
  4. Réponses: 19
    Dernier message: 02/02/2006, 23h30
  5. Réponses: 2
    Dernier message: 09/10/2005, 15h35

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