Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/02/2006, 21h26   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 34
Points : 12
Points : 12
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
sayef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2006, 21h39   #2
Membre Expert
 
Inscription : juillet 2004
Messages : 1 033
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 1 033
Points : 1 050
Points : 1 050
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
ePoX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2006, 21h44   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 34
Points : 12
Points : 12
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
sayef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2006, 21h50   #4
Nouveau Membre du Club
 
Avatar de Pe04
 
Étudiant
Inscription : mai 2005
Messages : 111
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2005
Messages : 111
Points : 35
Points : 35
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...
Pe04 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2006, 21h54   #5
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 34
Points : 12
Points : 12
C'est plutôt dans la Session et je l'a récupère avec $_Session["NomVar"];
sayef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2006, 21h55   #6
Membre éprouvé
 
Avatar de amika
 
Inscription : septembre 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 499
Points : 414
Points : 414
Envoyer un message via MSN à amika Envoyer un message via Yahoo à amika
utilise les sessions c bien pratique
amika est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2006, 22h21   #7
Membre Expert
 
Inscription : juillet 2004
Messages : 1 033
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 1 033
Points : 1 050
Points : 1 050
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.
ePoX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2006, 22h28   #8
Membre éprouvé
 
Avatar de GregPeck
 
Inscription : novembre 2005
Messages : 530
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 530
Points : 464
Points : 464
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...
GregPeck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2006, 10h53   #9
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2006, 11h01   #10
Membre habitué
 
Inscription : février 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 109
Points : 120
Points : 120
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.
dev_php_205 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2006, 12h36   #11
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 34
Points : 12
Points : 12
Merci à tous

Ca me semble plus claire
sayef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2006, 13h47   #12
Membre émérite
 
Avatar de macbook
 
Inscription : février 2006
Messages : 840
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 840
Points : 924
Points : 924
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.
macbook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2006, 16h30   #13
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2006, 17h17   #14
Membre émérite
 
Avatar de macbook
 
Inscription : février 2006
Messages : 840
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 840
Points : 924
Points : 924
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é.
macbook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2006, 17h23   #15
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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 ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 15h46   #16
Invité de passage
 
Inscription : mars 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 8
Points : 1
Points : 1
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...
isorn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h04.


 
 
 
 
Partenaires

Hébergement Web