Lecture données d'une SESSION PHP différente de celle en cours

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par saluts92, 14 Février 2013.

  1. saluts92
    saluts92 WRInaute impliqué
    Inscrit:
    12 Avril 2006
    Messages:
    999
    J'aime reçus:
    42
    Bonjour,

    j'ai ré-écrit session_set_save_handler() (en PHP) pour gérer mes sessions PHP dans une BDD et non dans des fichiers, qui héberge entre autre, les paniers utilisateurs.
    Jusque là tout fonctionne très bien.

    Lorsque mon client se connecte (user/mot de passe) je souhaite , s'il existe, récupérer le panier qu"il a pu faire sur un autre ordinateur (en ayant été connécté bien entendu) pour le fusionner avec celui en cours.

    Pour cela j'ai donc besoin de lire dans ma BDD les enregistrements correspondant au user_id en question (jusque là tout est OK) mais j'ai besoin d'interpréter le contenu (DATA) de la variable de session (qui en mode fichier corrspondant au contenu du fichier), qui ne se présente pas de la même façon qu'un tableau PHP "classique".

    Ma question est donc, existe t-il un moyen d'interpéter (de décoder) la data d'une variable de session, afin de récupérer les
    couples variables=valeur ?

    A moins que vous ne me proposiez une autre techique ?

    D'avance merci

    F
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 163
    J'aime reçus:
    338
  3. saluts92
    saluts92 WRInaute impliqué
    Inscrit:
    12 Avril 2006
    Messages:
    999
    J'aime reçus:
    42
    comme j'ai réécrit la fonction les données ne sont pas sérialisés apparemment pareceque la fonction unserialize me retourne FAUX
     
  4. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 163
    J'aime reçus:
    338
    Si tu nous montrais à quoi ça ressemble ces datas ?
     
  5. saluts92
    saluts92 WRInaute impliqué
    Inscrit:
    12 Avril 2006
    Messages:
    999
    J'aime reçus:
    42
    voici un exemple très simple qui je le rappelle est issu d'une commande $_SESSION["pagination"]=40;
    et stocker en BDD

    pagination|i:40;


    meme ca je n'arrive pas à le UNSERIALIZEr
     
  6. saluts92
    saluts92 WRInaute impliqué
    Inscrit:
    12 Avril 2006
    Messages:
    999
    J'aime reçus:
    42
    je viens de comprendre que je ne peux UNSERIALIZER que la partie i:40; merci de confirmer
    donc comment éclater toutes les informations contenu dans la DATA d'une session (voir ci-dessous):
    pour info les variables de session sont : pagination, httpreferer, key_prod_consult, prod_consult, prod_infos et enfin caddy_user celui qui m'intéresse le plus (sachant qu'il peut encore y avoir des variables après caddy_user et que caddy_user est un tableau)

    pagination|i:40;httpreferer|s:17:"http://127.0.0.1/";key_prod_consult|i:1;prod_consult|a:2:{i:0;s:5:"26314";i:1;s:5:"26315";}prod_infos|a:2:{i:0;s:16:"Pouf Léon";i:1;s:16:"Mobile Funambule";}caddy_user|a:2:{i:26314;a:12:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{s:5:"84.00";i:3;}}}}}i:1;s:9:"Pouf Léon";i:2;s:5:"84.00";i:3;s:5:"26314";i:4;a:1:{i:0;s:4:"0.00";}i:5;s:2:"-1";i:6;s:4:"0.00";i:7;s:8:"Pourcent";i:8;i:0;i:9;s:4:"1051";i:10;s:3:"OUI";i:11;a:1:{i:0;s:0:"";}}i:26315;a:12:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{s:5:"62.50";i:1;}}}}}i:1;s:17:"Mobile Funambule";i:2;s:5:"62.50";i:3;s:5:"26315";i:4;a:1:{i:0;s:4:"0.00";}i:5;s:2:"-1";i:6;s:4:"0.00";i:7;s:8:"Pourcent";i:8;i:0;i:9;s:4:"1051";i:10;s:3:"OUI";i:11;a:1:{i:0;s:0:"";}}}
     
  7. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 163
    J'aime reçus:
    338
    Ça ressemble fortement à des datas serialize() mais pas complètement.
    Tu as regardé à la valeur de session.serialize_handler ?
     
  8. saluts92
    saluts92 WRInaute impliqué
    Inscrit:
    12 Avril 2006
    Messages:
    999
    J'aime reçus:
    42
    la valeur de session.serialize_handler est php
     
  9. saluts92
    saluts92 WRInaute impliqué
    Inscrit:
    12 Avril 2006
    Messages:
    999
    J'aime reçus:
    42
    le format des données de session est :

    [nom_var] suivi du caractère | suivi des données sérialisées puis un ; pour séparer de la prochaine variables

    mais je ne peux pas EXPLODEr en utilisant le ; comme séparateur parcequ'il y en a dans les spéarateurs de valeurs quand il s'agit d'un tableau

    je suis étonné de ne pas trouver une fonction pour lire cette donnée qui fait partie intégrante de PHP
     
  10. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    les variables de session sont des données, par essence, volatiles. Quel intérêt de conserver de telles données dans une bdd et pas d'avoir une structure bdd plus classique et donc mieux adaptée à tes besoins ?
     
  11. saluts92
    saluts92 WRInaute impliqué
    Inscrit:
    12 Avril 2006
    Messages:
    999
    J'aime reçus:
    42
    ce n'était pas ma question
     
  12. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 163
    J'aime reçus:
    338
    Tu peux nous montrer ta réécriture de session_set_save_handler() ?
     
  13. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 024
    J'aime reçus:
    1
    Il semble que ta structure soit incompatible avec unserialize() car on y trouve le nom des variables.
    Il y a peut être moyen de les faire sauter pour que unserialize() puisse opérer tranquillement seulement il faudra que tu sache l'ordre des variables pour les retrouver.

    Pour reprendre ton exemple :
    Code:
    	$pagination = 40;
    	$httpreferer = "http://127.0.0.1/";
    	$key_prod_consult = 1;
    	$prod_consult = array("26314","26315");
    	$prod_infos = array("Pouf Léon","Mobile Funambule");
    La structure php qui se rapproche le plus de la data que tu as a traiter est la suivante :
    Code:
    	$variable = serialize($pagination).serialize($httpreferer).serialize($key_prod_consult).serialize($prod_consult).serialize($prod_infos);
    	echo ($variable);
    l'écho renvoie ceci :
    si maintenant on prend la partie correspondante de ta variable (donc les 5 première variables qui sont respectivement un INT, puis un STRING, un INT et deux ARRAY) (j'ai pas tout mis pour pas me prendre la tête)
    on peut donc poser :
    Code:
    	$chaine = 'pagination|i:40;httpreferer|s:17:"http://127.0.0.1/";key_prod_consult|i:1;prod_consult|a:2:{i:0;s:5:"26314";i:1;s:5:"26315";}prod_infos|a:2:{i:0;s:16:"Pouf Léon";i:1;s:16:"Mobile Funambule";}';
    Il conviens donc de traiter les différents nom de variable pour rendre la chaine "compatible" avec une dé-sérialisation.
    Code:
    	preg_match_all('#[a-z_]{1,20}\|#si',$chaine,$matchs, PREG_SET_ORDER);
    	$i=0;
    	$newChaine = $chaine;
    	foreach($matchs as $mVariableSession){
    		$newChaine = str_replace($mVariableSession[0],'i:'.$i.';',$newChaine);
    		$i++;
    	}
    	$newChaine = 'a:'.$i.':{'.$newChaine.'}';
    Si on fait un echo de $newChaine à la sortie ça donne ça :
    Si maintenant pour finir je unserialize() cette nouvelle chaine :
    Code:
    	$newData = unserialize($newChaine);
    	foreach($newData as $data){
    		print_r($data);
    	}
    Je retombe sur les variables d'origine soit :
    Qui ne sont pas encore des variables nommées mais comme tu connais ta structure ça ne pose pas de souci :wink:
     
  14. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 163
    J'aime reçus:
    338
    Voilà, sans plus d'infos, zeb a du faire du reverse engineering pour deviner ce que t'as sous la main :mrgreen:
     
  15. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    d'où ma question du dessus : pourquoi vouloir absolument passer par des variables de session sauvegardées en bdd. Une structure objet serait plus adaptée, non ?
     
  16. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 024
    J'aime reçus:
    1
    +1 surtout qu'en gardant un système de session classique rien n’empêche de mettre toutes les variables de session utiles a conserver dans une array qu'on sérialise ensuite pour l'injecter dans un blob du sgdb. Au login il suffit de lire le blob, de dé-sérialiser et d'initialiser les variables de session pour les retrouver.
     
Chargement...
Similar Threads - Lecture données SESSION Forum Date
Empêcher le download mais autoriser la lecture mp3 URL Rewriting et .htaccess 17 Août 2021
Balise Audio et lectures successives sur iOS Développement d'un site Web ou d'une appli mobile 14 Avril 2020
Lecture Header avec CURL et outil WRI Développement d'un site Web ou d'une appli mobile 25 Janvier 2020
Outils de lecture de positionnement Référencement Google 20 Janvier 2020
Automatiser l’écriture et la lecture sur les Réseaux Sociaux Développement d'un site Web ou d'une appli mobile 19 Janvier 2020
Serveur adapté pour lecture vidéo sur pic de visiteurs Demandes d'avis et de conseils sur vos sites 2 Décembre 2019
Lecture entete HTTP avec CURL et 403 Développement d'un site Web ou d'une appli mobile 31 Octobre 2019
Blog - avis de lecture Demandes d'avis et de conseils sur vos sites 5 Septembre 2018
lecture mkv sous chrome Développement d'un site Web ou d'une appli mobile 4 Septembre 2016
Lecture aléatoire des vidéos de mon site avec IE Développement d'un site Web ou d'une appli mobile 23 Janvier 2015
Interdire la lecture d'un fichier "texte image"aux Robot txt Débuter en référencement 1 Mars 2013
Lecture audio des mots sur Dictionnaire Online et SEO Débuter en référencement 6 Février 2013
Lecture vidéo dans facebook Facebook 5 Décembre 2012
Fil de lecture aléatoire ou déterminé ? Référencement Google 25 Juillet 2012
Problème de lecture des caractères Développement d'un site Web ou d'une appli mobile 28 Juin 2012
Gros problème avec ma BDD (login et lecture impossible) Développement d'un site Web ou d'une appli mobile 18 Juin 2012
[Wordpress] Notifications quand un article est mis en relecture Développement d'un site Web ou d'une appli mobile 14 Juin 2012
Ordre de lecture d'un robot si direction:rtl est appliqué Développement d'un site Web ou d'une appli mobile 10 Juin 2012
Lecture d'un site impossible aux USA ? Problèmes de référencement spécifiques à vos sites 16 Avril 2012
Lecture graphique Google trends Google : l'entreprise, les sites web, les services 14 Février 2012