8795 sujets

Développement web côté serveur, CMS

Bonjour tout le monde,

j'aimerais avoir votre avis sur un petit problème.

Je suis en train de réaliser un panier virtuel. Pour cela j'ai utilisé les variables de sessions PHP.
Pourquoi? Parce que cela me semblait plus adapté que l'utilisation de cookies...
L'avantage : taille de fichier illimité ( sachant qu'un cookie est limité à 4ko)
L'inconvénient : durée de vie limité ( 24 minutes il me semble...)

Mais le problème est qu'un ami m'a conseillé de passer directement par la base de données cad que lors de la création du panier, les informations seront directement stockés dans une base de données.
L'avantage selon lui : durée de vie illimité (l'administrateur sera chargé de vider la table), charge serveur réduit par rapport à l'utilisation de session...

Donc voila son conseil m'a un peu perturbé... c'est pourquoi j'aurais aimé avoir l'avis de plusieurs personnes.

Quelles solutions vous paraient la plus adaptées?

Merci d'avance.
Smiley smile
Bonjour,

Je penses que ce qui correspond à tes besoins c'est les sessions... dans la base de donnée Smiley biggol .

Je m'explique: les sessions correspondent bien à ce que tu veux faire, mais la gestion de base par php présente plusieurs désavantages (durée limitée, stockage sous forme de fichiers, etc) certains peuvent être modifiés via le php.ini mais pas tous.
Quand à stocker directement dans la base comme le suggère ton ami, cela nécessite toujours un système de reconnaissance du client ensuite, donc une session ou une identification à chaque fois. De plus il faudrait que l'administrateur purge la table manuellement ?

La solution consiste à définire ton propre gestionnaire de session (session_set_save_handler()), afin qu'il stock les données de session dans la base et définisse un cookie d'une durée plus longue (1 semaine par example). Ainsi le panier des clients durera aussi longtemps que leur session (qui se renouvelle automatiquement lorsqu'ils visitent le site).


Attention à:
-désactiver la transmission d'identifiants de session via l'url pour des raisons de sécurité.
-ne pas stocker de données sensibles dans les sessions.
Bonjour,

Merci Necromantik. Les sessions... dans la base de donnée... Smiley eek J'avoue que j'y avais même pas pensé. Je connaissais pas non plus vraiment le session_set_handler() faut dire Smiley sweatdrop . Je pense que je vais approfondir cette piste.

Toutefois le "réel" avantage par rapport à la solution de tout stocker directement dans la base de donnée me parait encore un peu flou.
Il est vrai comme tu l'as dit qu'un système de reconnaissance du client sera nécessaire. Mais j'avais pensé à une session contenant un id temporaire qui sera remplacer par l'id du client après authentification. Ce qui permettrait d'utiliser une session "légère" (pas d'information relatif au panier stocker dans la session). Le panier serait alors stocké directement dans la base.

Sinon pour purger la table... J'avais pensé à donner une durée de vie au stockage du panier dans la base de donnée. Comment? ... Ca c'est autre chose...
Bape a écrit :
Toutefois le "réel" avantage par rapport à la solution de tout stocker directement dans la base de donnée me parait encore un peu flou.
Il est vrai comme tu l'as dit qu'un système de reconnaissance du client sera nécessaire. Mais j'avais pensé à une session contenant un id temporaire qui sera remplacer par l'id du client après authentification. Ce qui permettrait d'utiliser une session "légère" (pas d'information relatif au panier stocker dans la session). Le panier serait alors stocké directement dans la base.

Sinon pour purger la table... J'avais pensé à donner une durée de vie au stockage du panier dans la base de donnée. Comment? ... Ca c'est autre chose...

Il y a un certain nombre d'avantage:
-stocker en même temps l'identification du client (session) et le contenu du panier, pas de risque d'avoir des entrées orphelines d'un côté ou de l'autre.
-il n'est pas nécessaire pour le client de s'identifier à chaque fois vu que la session "maison" peu durer un mois par exemple. Il n'est en théorie même pas nécessaire de s'identifier du tout, du moins pas pour le panier (par contre cela peut être requis par d'autres actions).
-nettoyage automatique des paniers/sessions perimés, en effet le gestionnaire de session possède une fonction "garbage collector" (ramasse-miette) executée automatiquement une fois sur 100 (par défaut).


Plus concrètement pour ton cas ça se passerai ainsi:
En premier lieu créer ou chercher (le web propose profusion de script déjà faits) un gestionnaire de session adapté à tes besoins (cookie de durée fixe, enregistrement des session dans la base).
Puis l'inclure à ton script (avant toute sortie, les sessions utilisant les cookies),
Ensuite utiliser $_SESSION et y stocker le panier, le gestionnaire s'occupant du reste.



PS: par données sensible dans les sessions je pensais pas au panier (qui ne l'est pas à mon avis) mais plutôt à des choses comme n° CB, adresse, etc. D'une manière générale je déconseillerais de les stocker tout cours Smiley lol .
Voila,
j'ai plus ou moins fait mon panier avec les sessions stockées dans la base de données Smiley smile . Reste plus qu'à le tester de fond en comble...
En tout cas merci Necromantik pour ton aide Smiley cligne . Je met le sujet en résolu. Smiley biggrin

edit : Plus de place pour mettre un résolu devant le sujet Smiley sweatdrop . Donc je sais pas trop comment faire haha... Bon d'un coté au moins peut-être d'autre utilisateurs donneront leurs avis sur le sujet.
Modifié par Bape (16 Aug 2007 - 10:33)