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 04/12/2006, 21h29   #1
Membre actif
 
Avatar de FrankOVD
 
Inscription : juin 2005
Messages : 408
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 408
Points : 182
Points : 182
Envoyer un message via MSN à FrankOVD
Par défaut serialize() et perte de données (poids maximal?)

Bonjour,

Dans un système de gestion des cartes de temps, je crée un objet assez lourd de la façon suivante :
Code :
1
2
3
 
if(isset($_SESSION["cartes"])) $cartes = unserialize($_SESSION["cartes"]);
else $cartes = new Cartes();
L'objet Cartes contient plus de 6000 objets Carte qui contiennent tous environ une trentaine de données primitives, ce qui fait beaucoup d'information. À la fin de mon code, j'enregistre mon objet en session de la façon suivante :
Code :
1
2
 
$_SESSION["cartes"] = serialize($cartes);
Toutes mes pages contiennent les deux sections de code citées plus haut. Mais lorsque je rafraichit une page, mon objet passe brusquement de 6000 et quelques éléments à 8. Je ne suis pas surpris que ça ne fonctionne pas. Mais je tiens à savoir si c'est pour ce que je crois, c'est à dire que serialize ne pourrait pas traiter autant d'information ou qu'une variable de session ne pourrait pas être aussi volumineuse. Comment remédier à ça?
__________________
http://www.overdrunk.net

Pensez à la balise
FrankOVD est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 22h53   #2
Membre chevronné
 
Avatar de efficks
 
Inscription : septembre 2005
Messages : 714
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 714
Points : 689
Points : 689
Je ne sais pas la taille maximale d'une session mais une chose est sûre c'est une très mauvaise idée de mettre toutes ces informations là dans une session!!! Surtout sur une session existe par utilisateur et que tu as plusieurs utilisateurs imagine la redondance de donnée!!!!

Utilises une base de données et des requêtes beaucoup plus performant, pratique et maintenable!
__________________
Avant de poster : FAQ, tutos, rechercher, google, ... Après :
Merci
efficks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 23h42   #3
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
Ouais, mais ca dépend : le serialize() permet de passer un Objet "actif" d'une page à l'autre par des valeurs GET, POST ou bien SESSION, sans détruire l'objet, et donc son contexte d'utilisation.....

Pour les variables de SESSION, je suppose que tu es limités par le cache du Serveur. As tu une idée du poid de tes Objets ?

Passer tes objets en GET, je pense pas que ca passera.... Peut être en POST ?

Ou alors, autre solution effectivement : tu dirige le path de sauvegarde des SESSION sur une BDD, ce qui te permet de libérer de la ressource.... Mais je crois que ce n'est valable que pour une "fin de session".....

Pour plus d'info, le serialize() transforme tout ton objet en chaine de caractères. Donc effectivement, ce n'est pas très bon !!! Tu peux peut_être diminuer la taille de ton objet avec les méthodes __sleep() et __wakeup(), pour libérer un peu tes objets....

Pour plus d'info sur les session :
http://fr3.php.net/manual/fr/ref.session.php

Mais je ne pense pas que ca t'apprendra grand chose de plus....
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2006, 02h44   #4
Membre chevronné
 
Avatar de efficks
 
Inscription : septembre 2005
Messages : 714
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 714
Points : 689
Points : 689
Non... pas seulement mettre la session dans la base de données. Mettre les données dans la base de données.
__________________
Avant de poster : FAQ, tutos, rechercher, google, ... Après :
Merci
efficks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2006, 16h16   #5
Membre actif
 
Avatar de FrankOVD
 
Inscription : juin 2005
Messages : 408
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 408
Points : 182
Points : 182
Envoyer un message via MSN à FrankOVD
D'accord,

ça me force a reculer un peu dans ce cas. Je croyais pouvoir réussir a stoquer mes données pas trop loin pour pouvoir obtenir un gain de performance par rapport aux éternelles requêtes dans la base de données. Alors je crois que je vais simplifier un peu le tout et stoquer moins d'informations en mémoire. Ce que je comprends plus ou moins c'est que ça marchait a merveille jusqu'à tout dernièrement alors que j'ai migré de Fedore Core 4 a Fedora Core 6. Normalement, ça devrait améliorer les choses et ne pas les déteriorer. Je me suis assuré de d'allouer suffisament de ressources dans php.ini .
__________________
http://www.overdrunk.net

Pensez à la balise
FrankOVD est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2006, 16h32   #6
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
Ca marchait avant ?

Tu as changé de core PHP entre temps (entre le fedora 4 et 6) ?

Tu devrais peut être jeter un oeil plus profondément dans le php.ini, par aquis de conscience....
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h06.


 
 
 
 
Partenaires

Hébergement Web