session site marchand
Bonjour,
Je fais actuellement un site pseudo marchand (sans paiement sécurisé) et je rencontre un souci avec les sessions
En effet, sur toute les pages je met mon script de session avec insertion dans la bdd de l'id de session représentée par time ().
Mon souci, est que sur chaque page il me met une nouvelle id session.
J'espère que je suis clair.
Voilà mon script sur chaque page
<?php
//script de connexion bdd
include ("commun/connec.inc.php");
$now=time();
session_start();
if ( $_session['client'] == "" )
{
$sql="INSERT INTO session_client (id_session) values ('$now');";
$req=mysql_query ($sql) or die (mysql_error());
session_start();
$_SESSION['client']=$now;
}
?>
Je ne comprend pas ta logique.
Pourquoi utiliser time ? Deux clients peuvent se pointer pendant la meme seconde et déregler ton script.
Pourquoi utiliser une variable de session pour générer un "pseudo id" de session alors que dès que tu start une session, un id unique se crée automatiquemet (
session-id).
Autre chose, cela ne sert à rien de faire deux session_start.
C'est vrai pour 2 clients, même si c'est très fort probable, alors déjà pour commencer, je fais juste un session start, mais pour le mettre dans la bdd, il faut bien que je mette une variable de session..
Si je met cette variable de session, il faut bien que je l'initialise non?
Dès que tu crées une session, un identifiant unique est créé.
Donc pas la peine d'en créer un foireux (qui risque d'exister en double).
désolé, je suis pas un crack, mais comment tu la récupère
Je te l'ai dis dans un message précédent.
Click sur le lien...
merci de ton aide, j'ai réussi en suivant tes conseils.
Seulement après plusieurs tests, j'ai un autre problème. A savoir que je pensais qu'à la fermeture du navigateur, la session était détruite, mais la quand je ferme le nav et que je le réouvre, il garde la meme session_id. J'ai alors un problème pour la gestion du panier, qui va afficher des produits précedement mis dedans....
Ma base de donnée est ainsi construite.
Une table session client et une table produit reliée par une table d'association commande, avec les clés id_session_client et id_produit en clé étrangère......et un champs quantité...
Si l'id session est identique sur une visite ultérieur, son panier sera déjà rempli.
Comment puis je faire pour que la session_id ne reste pas dans le cahce navigateur?
Merci de ton aide
C'est impossible à faire (tu ne peux pas savoir à quel moment l'utiliateur ferme son navigateur).
En revanche, comme je te l'ai déjà dis, l'id de session est unique, donc aucun "mélange" n'est possible.
Quand tu te reconnectes vite après ta déconnexion, le serveur reprend l'id de session que TU avais et non l'id d'un autre client.
Et entre nous, si les sessions ne savaient pas différencier chaque client, pourquoi est ce qu'on les utiliserait ?
Le problème, c'est pas d'un client à l'autre, mais justement si un même client se connecte à partir de son poste à deux moment différend pour commander une deuxième fois par exemple...
Son session_id sera identique.....et son panier ne sera pas vide puisque, dans la bdd, y aura encore l'id session sur les produits commandés précédemment.
En effet, sur la page panier, je fais une requête sur tout les produits qui ont une session_id = session en cours. Donc, si la session_id est identique, il prendra aussi les produits commandé à une date précédente vu que son id est toujours la même
Je sais pas si je suis très claire.
Sinon, et après j'espère que je te dérangerai plus, est ce parce que je relance la session peux de temps après avoir fermer le navigateur? Si oui quel est le temps avant que la session soit détruite et ainsi la session_id renouvelé?
Ce temps depend de la configuration de php.
Tu peux le consulter dans ton php.ini.
Sinon, pour ton problème, tu peux (par exemple) :
- detruire la session lorsque la commande est validée
- détruire la session si l'utilisateur n'a cliqué sur aucun lien au bout de 5 mn
- etc...
Plein de petites astuces.
Mais il n'y en a aucune qui va détruire la session pile au moment où la personne va fermer son navigateur.