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 :

[Sécurité] Session Classe


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 242
    Points : 108
    Points
    108
    Par défaut [Sécurité] Session Classe
    Bonjour

    J'ai quelques soucis avec les objets en php en effet je vous explique mon probleme

    J'ai un objet en php, ma session ( il se peut que je n'utilise pas les bons termes au bon moment mais entre objet et session dur dur de faire la difference )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['user_info'] = new user($data['id_user']);
    j'ai ecris la classe de maniere à ce que j'ecrive ceci
    $user->getId()
    , la fonction me retourne par exemple : 1
    sur tout les pages du site, a n'importe qu'elle moment.

    Mais sur une page je souhaiterais modifier la valeur par consequent j'ai ecris un Seters :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function setId($NewId) { $this->id_user = $NewId; }
    sur ma page alors j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		$NewId="1005";
    		$user->setId($NewId);
    Si apres cela je fais un
    $user->getId()
    alors la fonction me retourne bien 1005.

    Cependant lorsque je change de page et que je redemande la valeur
    la fonctionne me retourne pas
    1500
    mais
    1
    Pourquoi ?

    Je vous remercie pour votre aide...
    A bientot

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 242
    Points : 108
    Points
    108
    Par défaut
    En fait je viens de trouver une solution mais je ne sais pas si c'est tres conseillé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	if ( empty($_SESSION['age']) ) 
    	$_SESSION['age']="20";

    Et la valeur reste 20 tout au long du site et lorsque je la modifie je fais simplement

    Et la la valeur est modifié...

    Est ce la bonne solution ?

    Personnellement je ne vois pas trop a quoi sert les objets en php, si pour les utiliser pleinement ( je veux dire avec des Seters ... ) il faut rester dans la meme page....

    c'est assez flou pour moi, enfin je pense que vous l'avez remarquez
    Je vous remercie
    Kilian

  3. #3
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    tu doit etre en php 4 car en php 5 normalement ca devrais marcher.
    je suppose que tu récupère ton user comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $_SESSION['user_info'] = new user($data['id_user']);
    // plus loin ou sur une autre page :
    $user = $_SESSION['user_info'] ;
    si tu es en php 4, fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $user =& $_SESSION['user_info'] ;
    le & sert a faire une référence et non pas à travailler sur une copie de ton objet.

    si tu es en php5, il te faut certainement rajouter la méthodes __sleep a tes classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function __sleep()
    	{
    		return array_keys(get_class_vars(get_class($this)));
    	}
    il y a aussi __wakeup mais la t'en a pas besoin normalement

  4. #4
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    En fait je viens de trouver une solution mais je ne sais pas si c'est tres conseillé

    Code:
    if ( empty($_SESSION['age']) )
    $_SESSION['age']="20";
    Quelqu'un peut m'expliquer pourquoi ce ne serait pas conseillé? puisque ce que tu veux c'est modifier la variable de session (donc pour tout le restant de la session ) non?

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 130
    Points
    9 130
    Par défaut
    De façon générale quelque soit le langage et particulièrement avec php

    la définition de la classe doit être connue avant l'ouverture de la session

    lorsque cela est possible le plus simple est d'utiliser des objets anonymes
    en php un objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $usr->nom = 'Laguigne';
    $usr->prenom = 'toto';
    peut être mis en session et récupéré sans aucune dificulté.

    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class user {
      var $nom;
      var $prenom;
      function user ($n,$p) {...
      }
    }
     
    $usr = new ('Laguigne','toto');
    cet objet va posser un problème s'il est mis en session
    en effet il va être serialisé et lorsqu'on ouvrira la session il sera déserialisé. à ce moment là php vas tanter de creer une instance de user avec les valeur de l'objet usr
    si cette classe n'ext pas connue ça plante.

    deux solution
    • charger la classe avant de faire session_start

    • transformer l'objet en objet anonyme avant la mise en session, mais seule les valeurs soront accéssible à l'ouverture de la sessions pas les methods


    A+JYT

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 242
    Points : 108
    Points
    108
    Par défaut
    Je vous remercie a tous a votre interessement et a votre aide a ce sujet

    Je vais tester avec le &, je vous dirai si cela résoud le probleme.

    Sinon est il possible de passer de php4 en php5 sans probleme ? ( sous linux Debian )

    // Message Edité
    Avec le & ca fonctionne tres bien Merci BCP

  7. #7
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 130
    Points
    9 130
    Par défaut
    oui moyenant quelque adaptation.

    voir pour ça la liste des fonctions disparues

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

Discussions similaires

  1. [Sessions] Classes et variables de sessions
    Par Thanaroth dans le forum Langage
    Réponses: 4
    Dernier message: 06/10/2005, 17h17
  2. [EJB Session] class not found exception ?
    Par champion dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 12/02/2005, 00h46
  3. Réponses: 2
    Dernier message: 05/10/2004, 23h43
  4. [VB.NET] Server.MapPath et Session dans une classe
    Par nancy54 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/09/2004, 15h23

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