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é] Stocker en Session $result = mysql_query(requete)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut [Sécurité] Stocker en Session $result = mysql_query(requete)
    Bonjour,

    J'ai essayé de stocker le resultat d'une requête en session afin de l'exploiter par la suite.

    Le problème dès je passe à une autre page la variable $result n'existe plus, J'ai déduit que la connexion est fermé dès qu'on passe à une nouvelle page.

    Je souhaiterais savoir est-ce bien la cause ? et s'il y a un autre moyen de le faire?

    C'est à dire est-ce que je suis obligé de créer une classe dans laquelle je stock tout avant de la stocker en Session ?

    Merci

  2. #2
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    Sans connaitre parfaitement le comportement des focntions mysql*, je pense qu'effectivement un resultat est associé à une connection. Donc qd la connexion est fermée le résultat est libérée.

    Après classe ou pas classe c'est toi qui voit. Tu peux très bien l'enregistrer dans un tableau très classique.

    Fin ceci dit, qu'est qui t'empeche de requeter, une premiere fois, puis une seconde fois dans la page suivante ?

    bye

  3. #3
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut
    C'est vrai rien ne m'empêche de lancer la requête plusieurs fois, c'est plus par souci de performance, car je souhaite réduire l'accès à la base de données

  4. #4
    Membre confirmé Avatar de Pe04
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 111
    Par défaut
    comment passe tu la variable à l'autre page (GET ou POST) ??
    tu peut stocker l'information que tu veut dans un variable et la passer avec la methode GET...

  5. #5
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut
    C'est plutôt dans la Session et je l'a récupère avec $_Session["NomVar"];

  6. #6
    Membre chevronné Avatar de amika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 498
    Par défaut
    utilise les sessions c bien pratique

  7. #7
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    Hm je ne connait pas le temps d'exection de ta requete mais l'action de serialisation/desrialisation n'à jamais fait l'écho de temps d'execution incroyable.

    Pour ce qui est de l'accès à la base de donnée, le plus couteux en temps d'execution amha reste les grosses requetes sur plusieurs tables que l'execution de multiple requetes simple.

    A toi de voir.

  8. #8
    Membre chevronné Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Par défaut
    Le problème c'est qu'on ne peux pas sérializer une ressource donc on est obligé de sérialiser les résultats de la requete pour ensuite les retraiter dans la deuxieme pages.

    Ca oblige à traiter deux fois les résultats de la requete, ce n'est pas très optimisé, et comme si j'ai bien compris le but du post est d'optimiser...

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Visiblement, il n'est pas possible de mettre un $result dans une session. C'est en effet logique puisque le $result est lié à une connection, dont l'identifiant est perdu à la fin de chaque script.

    Pour ton optimisation, il faut aussi considérer l'utilisation des ressources serveur : si tu mets en cache les tuples de tes requêtes (ce qui semble la meilleure alternative à conserver le $result), tu utilises une grosse quantité de mémoire sur le serveur tant que tu ne détruis pas ta session.
    En revanche, si la requête est effectuée de nouveau sur chaque page, tu n'utilises pas cette quantité de mémoire et tu fais confiance à MySQL pour mettre en cache tout seul les requêtes fréquentes et leurs résultats...

    C'était ma proposition : ne t'occupe pas de tout ça car MySQL le fait déjà à ta place.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 109
    Par défaut
    Deplus, .. a quoi sert d'executer un SELECT ( ou une connexion ) si ce n'est pas pour utiliser les resultats ? .. c'est du temps perdu ...
    Il suffit de faire la requete au moment ou ton script a besoins des donnees. Pas avant... ca optimise tes acces bases.

  11. #11
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut
    Merci à tous

    Ca me semble plus claire

  12. #12
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Si je puis me permettre une suggestion : Je stockais dans une session le résultat d'une requête pour ensuite pouvoir l'exploiter dans d'autres pages, comme par exemple dans le cas de pagination.
    Le problème, et même en étant sur un serveur dédié, c'est que lorsque le fichier de session dépassait 2 Mo, php se mettait à se comporter de façon un peu aléatoire et étrange.
    Je suis donc passé aux tables temporaires que permet Mysql, et non seulement je n'ai plus de problème de dépassement de mémoire tampon, mais mes scripts sont un chouille plus rapide.

  13. #13
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    macbook : Ton témoignage est intéressant (il ne faut jamais oublier les tables MERGE) mais, AMHA, l'exemple est mal choisi. En effet, MySQL dispose de la clause LIMIT, bien plus intéressante que les tables temporaires lorsqu'il s'agit de pagination car elle t'évite de sélectionner des données dont tu ne te servira pas.

  14. #14
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    C'est vrai, mais dans le cas d'une pagination ma table temporaire ne contient que les éléments issus du premier select.
    Sur une table de plusieures centaines de milliers d'enregistrements dont j'extrait une centaine à peine de tupple, une table temporaire pour paginer est plus légère, même si chaque champs du select est indéxé.

  15. #15
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Je dis ça, j'ai peut-être tort mais je pense sincèrement que c'est une mauvaise idée que d'utiliser une table temporaire (même MERGE) pour la pagination : tu gaspilles une quantité énorme de mémoire côté serveur et je ne suis pas sûr que aies un contrôle parfait la suppression de la table en question (que se passe-t-il si je ferme le navigateur ?).
    De plus, cela suppose que tu fasses un SELECT de davantage de tuples que ceux dont tu as besoin pour la page actuelle, non ?

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    Bonjour, j'ai un soucis similaire avec une base postgreSQL, passer un $result en session ne fonctionne pas, ce qui est bizzare.
    En effet, si je travaille sur unseul script, je peux toujours acceder aux resultats de ma requête à l'aide de $result, même après avoir explicitement fermé la connection à la base (avec pg_close($connection) ).

    Si quelqu'un peut éclairer ma lanterne...

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

Discussions similaires

  1. Recuperer un attribut de session dans la requete
    Par Alec6 dans le forum Struts 1
    Réponses: 4
    Dernier message: 05/05/2009, 08h56
  2. passer variable session dans une requete
    Par mghari11 dans le forum JDBC
    Réponses: 1
    Dernier message: 18/06/2008, 23h18
  3. Stocker les sessions dans une base de données
    Par mic79 dans le forum Langage
    Réponses: 7
    Dernier message: 06/04/2006, 21h57
  4. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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