Boutique en ligne, sessions et google.. que faire ? -> id

Nouveau WRInaute
Bonjour à tous.

je termine le dév d'une boutique en ligne.
Je n'avais jamais fais cela, et je découvre étape par étape, bien heureux d'avoir un peu maitrisé les sessions pour fabriquer mon petit panier..

Bon, j'en suis désormais à l'étape référencement.. ( rassurez vous, j'y avais tout de même bien réfléchi un peu avant.. URwl, structure des pages, multilangue par paramètres.. etc.. )..

Mais voilà.. Boom.. patatras.. Il semblerait que les sessions, comme les cookies ne soient pas trop appréciés par le grand chef..

Je cherche, je cherche.. mais je n'ai pas encore trouvé de solution satisfaisante.. y en a t'il une ?

Je viens d'avoir une idée.. et je voulais quelques avis avant de passer de en cuisine :

> Pourquoi ne pas activer la variable de session qu'une fois qu'un utilisateur a effectivement ajouté un article dans son panier.

> Sur le bouton ( ajouter au panier ) je place un paramètre (go_session) par exemple, et sur l'entête de mes pages je teste la valeur de ce paramètre pour savoir si je place le session_start() ou non.

> Ensuite, puisque la session est ouverte.. je stocke ce paramètre lui aussi dans la session..

> Coté incidence panier ( qui est un module indépendant.. ), il ne me reste qu'a créer un petit bout de code html pour indiquer qu'il est vide ( dans l'état actuel des choses, il indique cela en lisant la session et indique que le panier est vide si la variable indique zéro.. logique )

Voilà, en quelques mots..

Quelqu'un a t'il déjà expérimenté un truc dans le genre ?
Sinon qu'en pensez vous.. ?

Je me lance ?

:?:
 
Nouveau WRInaute
C'est déjà un premier point.
Merci pour le lien vers le topic.

Donc je vais me lancer.
Toutefois, je voudrais éviter le cookie et la bdd qui stocke les sessions...

A réfléchir.
 
WRInaute accro
Le cookie et l'enregistrement dans la bdd est tout de même pratique pour sauvegarder la panier quelques temps (par exemple, sur la boutique que je gère, je constate que beaucoup ajoute au panier sans commander, puis revienne quelques temps plus tard (genre 24H) pour finaliser la commande )
 
WRInaute passionné
Comment ca se passe le stockage en BD, et comment retrouver le visiteur par rapport au champ de la BD ?

-> cookies ???
 
Nouveau WRInaute
Salut,

Je comprends pas trop où est le probleme avec la session...

Pour moi la démarche est la suivante :

- session_start() sur toutes les pages
- envoi d'un cookie pour sauver l'id de session (facultatif)
- Dès que l'internaute navigue sur une page du site, la fonction session_start() reprends le même id sans besoin de passage par l'url ou en post ou par le cookie. L'id de session est détruit si la fenêtre est fermée.
- Clic sur ajouter au panier => enregistrement d'une ligne dans le panier avec comme clef l'id de session + article.
- Après commande valider destruction de l'id de session dans le panier.
 
WRInaute accro
Oui netsys. Grâce à un cookie, tu peux faire la correspondance entre la dernière session du client et celle enregistré dans le cookie. A partir de ces 2 données, tu peux retrouver son panier et le faire repartir sur sa dernière session.
 
WRInaute accro
Anthoduff, la session qui démarre dès le début PEUT géner les bots d'indexation (je dis "peut" car apperemment, il y a une parade en configurant un paramètre dans le php.ini mais je ne m'en rappel plus).

Dans tous les cas, pour une session de panier, il est tout de même plus logique de la faire démarrer à la création du panier, c'est à dire au premier ajout.
 
Nouveau WRInaute
@blman

En quoi peut-elle géner le bot ? n'est elle pas transparente lors d'un session_start() sans aucun passage en url ?

Si tu ne la fais démarrer que sur une page panier, tu dois ensuite la faire voyager de pages en pages, session_start() evite ce désagrement.
 
WRInaute accro
Anthoduff a dit:
En quoi peut-elle géner le bot ? n'est elle pas transparente lors d'un session_start() sans aucun passage en url ?

Si ta session est transparente, c'est que ton php.ini est bien configuré donc pas de problème au niveau de l'indexation si tes sessions ne se balladent pas dans l'url. Je ne m'y connais pas trop sur ce point car je n'utilise pas les sessions de PHP

En tout cas, ce que je suis sûr, c'est que page.php?sid=fdgdhfgl est différente de page.php?sid=mloppzih aux yeux des bots d'indexation

Anthoduff a dit:
Si tu ne la fais démarrer que sur une page panier, tu dois ensuite la faire voyager de pages en pages, session_start() evite ce désagrement.

Les bots d'indexation n'ajoute pas au panier donc ils ne seront jamais confronté à ce cas de figure.
 
Nouveau WRInaute
Bon.. je vois que cela s'active.
je pense avoir trouver une solution, mais peut être pas optimale...

En en tête de page j'ai placé le code suivant :

Code:
$test_cookie=$_COOKIE['commande_on'];
$sess_in = $_GET['sess_in'];


if ($sess_in == '1') 
{session_start(); setcookie("commande_on","1"); }

if ($test_cookie == '1') 
{session_start(); $sess_in = '1';}

Sur le bouton ajouter au panier, jai deux version en fonction de la valeur de $sess_in. ( url?tagada=$ref ) ou ( url?tagada=$ref&sess_in=1 )

dans le cas ou sess_in n'est pas encore déclaré->
J'ai ajouté une ligne à mon .htaccess.
L'avant dernière...
Code:
....
RewriteRule ^diam_([a-z]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+).html$  site.php?lang=$1&item=$2&cat=$3&diam_select=$4&tri=$5   [L]
RewriteRule ^select_([a-z]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+).html$  site.php?lang=$1&item=$2&cat=$3&article=$4&couleur=$5&diam_select=$6&tri=$7   [L]
RewriteRule ^stylecart_([a-z]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+).html$  site.php?lang=$1&item=$2&cat=$3&article=$4&couleur=$5&diam_select=$6&tri=$7&complet=$8   [L]
RewriteRule ^panier_([a-z]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+).html$  site.php?lang=$1&item=$2&cat=$3&ref=$4&article=$5&couleur=$6&diam_select=$7&tri=$8&ajout=$9   [L]
RewriteRule ^panier_([a-z]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+).html$  site.php?lang=$1&item=$2&cat=$3&ref=$4&article=$5&couleur=$6&diam_select=$7&tri=$8&ajout=$9&sess_in=1

Ensuite il y a juste un test sur le panier. Pour savoir si je l'affiche ou non.
ça à l'air de fonctionner.

Bon après, c'est certain, il faut affiner.
 
WRInaute passionné
Les bots n'acceptent pas les cookies donc pour eux le serveur passe la variable de session dans l'url. Les moteurs de référenceront pas alors ces pages...

Merc Blman pour les infos sur le panier en BD. Ce qui veut dire que pour les personnes n'acceptant les cookies on ne peut utiliser les BD pour stocker la variable de session et son contenu ?
 
Nouveau WRInaute
Oui..
Bon..

L'idée du cookie est de faire suivre la valeur de sess_in à un pendant tout le reste de la navigation.

> Soit je modifie l'ensemble des liens en ajoutant &sess_in=$sess_in

> soit je trouve une astuce via ma fonction rwlurl() - celle qui réecrit les url - qui rajoute la valeur $sess_in à 1. J'en suis juste quite à doubler toute les lignes du .htacess.

> soit je trouve une solution pour faire passer la variable $sess_in une fois qu'elle est défine sans passer par l'url.
Je vous avoue que c'était ma première idée.Mais je n'ai pas réussi à la concrétiser. Pourtant je suis sur que c tout simple : du style,
<form>
<input type='hidden' name='sess_in' value='$sess_in'>
</form>

Le pb, c'est que je n'ai pas trouvé la manière " d'auto-valider le formulaire"..

quelqu'un à une idée..
 
Nouveau WRInaute
Bon..

je récapitule..

L'idée du formulaire qui s'auto valide..
C'était facile, mais j'aurai du y penser avant.. ça a un peu tendance à faire une boucle..

restait 2 options.
J'ai choisi de modifier ma fonction rwl()
elle était:
Code:
function urlrw($url) {
	
		$url_reg = str_replace (array(".","?","=","&"), "@", "$url");
		$pop = split("@","$url_reg");
		
		$url = $pop[0];	
		$i = 3;
		
		while ( $pop[$i] !="" )
		
		{
		$url .= "_".$pop[$i];
		$i++;
		$i++;
		}
	
	return $url.".html";

}

elle est devenue

Code:
function urlrw($url) {
	
		$url_reg = str_replace (array(".","?","=","&"), "@", "$url");
		$pop = split("@","$url_reg");
		//echo("urlreg=$url_reg");
		//$img_deb = $pop[0];		
		
		$url = $pop[0];	
		$i = 3;
		
		while ( $pop[$i] !="" )
		
		{
		$url .= "_".$pop[$i];
		$i++;
		$i++;
		}
	
	$sess_in = $_GET['sess_in'];	
	if ($sess_in == '1') 
	
	{ return $url."_sessin.html";}
	
	else 
	
	{ return $url.".html";}

}


Pour le reste, je (presque) n'ai touché à rien.

> test de la variable sess_in pour la première entrée au panier.
> doublement des lignes du .htaccess pour urlrw.


Code:
RewriteRule ^([a-z]+)_([a-z]+)_([0-9]+)_([0-9]+).html$  /site.php?lang=$2&item=$3&cat=$4  [L]
RewriteRule ^([a-z]+)_([a-z]+)_([0-9]+)_([0-9]+)_sessin.html$  /site.php?lang=$2&item=$3&cat=$4&sess_in=1  [L]

> Petit Jeu pour les crack.. Vous pouvez deviner quel est mon hébergeur ?

Bon voil@.
Comme cela ça fonctionne sans utiliser de cookies ni de session..
Sauf si GG décide de s'offrir un vase...

Dans tous les cas, merci de votre aide.
Encore une fois, j'aurai appris pas mal de choses.
Pour la prochaine fois, je penserai à la solution de @blman.
Effectivement, c peut être plus sérieux d'utiliser une BD pour stocker les sessions.

Enfin, si vous souhaitez regarder ce que cela donne en ligne..
( ce n'est pas pour faire de la pub.. ) mais peut être que je remercie tout le monde un peu vite.. il reste peut être encore une subtilité...
http://www.terresdautan.com
C'est encore en test, donc il reste quelques trucs à finaliser.

A bientôt pour de nouvelles aventures.
Gérald.
 
WRInaute impliqué
quelques points paraissent bizarres dans cette discussion :

1) "on peut stocker l'id de session dans une base de données"
et alors ? ça résoud pas le problème de toute facon il faut transmettre l'id de session soit par url soit par cookie pour que l'internaute soit identifié.
enregistrer l'id dans la base ne pourra pas dire à quel internaute il appartient.

2) Anthoduff dit "pas besoin de passer l'id par url ou cookie"
si on écoute Anthoduff l'id resterait la même à chaque start, cela me paraissait tellement formidable que je viens d'essayer mais malheureusement si on refuse le cookie et qu'on transmet pas l'id pas url alors à chaque start le serveur envoie un nouvel id, donc ca ne marche pas.

3) j'aimerais qu'on me confirme un truc important :
peut on faire un panier sans envoyer l'id par cookie ou par url ?
je pense que non, mais bon je commence à douter avec les discussions de ces derniers jours sur les sessions.

merci
caro
 
WRInaute discret
il y a moyen soit :
* php est compilé avec l'option enable-trans_id (il me semble que c'est le cas par defaut depuis la version 4 mais po sur ...)
* dans le php.ini session.use_trans_sid = 1
* dans la page php ini_set("session.use_trans_sid", 1);

J'utilise cette methode sur mes boutiques en lignes et ca fonctionne a merveille sans cookie ni sid dans l'url.
Il y a tout de meme un bemol, ca marche sur tout les navigateur sauf firefox ... Ne me demandez pas pourquoi, j'ai jamais compris (cf post sur ce forum)
Pour les utilisateur de Firefox, j'utilise donc le cookie :'(
 
WRInaute accro
caro a dit:
3) j'aimerais qu'on me confirme un truc important :
peut on faire un panier sans envoyer l'id par cookie ou par url ?
je pense que non, mais bon je commence à douter avec les discussions de ces derniers jours sur les sessions.
En fonction de l'adresse ip de l'utilisateur.
Mais le mieux, est tout de même l'utilisation du cookie me semble t-il.

blman a dit:
Oui netsys. Grâce à un cookie, tu peux faire la correspondance entre la dernière session du client et celle enregistré dans le cookie. A partir de ces 2 données, tu peux retrouver son panier et le faire repartir sur sa dernière session.
Inutile de stocker dans une base de données ???
Pourquoi encombrer la base de données alors qu'il suffit le mettre dans le cookie l'id du produit ?
 
WRInaute accro
phreddpullfer a dit:
* php est compilé avec l'option enable-trans_id (il me semble que c'est le cas par defaut depuis la version 4 mais po sur ...)
Oui

phreddpullfer a dit:
* dans le php.ini session.use_trans_sid = 1
Mais la transparence ok, mais il doit tout de même y avoir un cookie.

phreddpullfer a dit:
* dans la page php ini_set("session.use_trans_sid", 1);
Pourquoi si déjà activer par défaut ?

phreddpullfer a dit:
J'utilise cette methode sur mes boutiques en lignes et ca fonctionne a merveille sans cookie ni sid dans l'url.
Il y a tout de meme un bemol, ca marche sur tout les navigateur sauf firefox ... Ne me demandez pas pourquoi, j'ai jamais compris (cf post sur ce forum)
Pour les utilisateur de Firefox, j'utilise donc le cookie :'(
Bizarre étant donné que cela est par défaut....
Donc la plupart utilise ce système.

Ou alors quelque chose d'autre m'échappe.
 
Nouveau WRInaute
caro a dit:
quelques points paraissent bizarres dans cette discussion :

1) "on peut stocker l'id de session dans une base de données"
et alors ? ça résoud pas le problème de toute facon il faut transmettre l'id de session soit par url soit par cookie pour que l'internaute soit identifié.
enregistrer l'id dans la base ne pourra pas dire à quel internaute il appartient.

2) Anthoduff dit "pas besoin de passer l'id par url ou cookie"
si on écoute Anthoduff l'id resterait la même à chaque start, cela me paraissait tellement formidable que je viens d'essayer mais malheureusement si on refuse le cookie et qu'on transmet pas l'id pas url alors à chaque start le serveur envoie un nouvel id, donc ca ne marche pas.

3) j'aimerais qu'on me confirme un truc important :
peut on faire un panier sans envoyer l'id par cookie ou par url ?
je pense que non, mais bon je commence à douter avec les discussions de ces derniers jours sur les sessions.

merci
caro

1) Tu identifies l'internaute avec l'id de session. Si tu veux permettre que l'internaute ferme son naviguateur tu enregistres l'id dans un cookie sur le poste client. Lorsque le client ajoute au panier tu enregistres l'id de session comme identifiant unique du panier, donc tu retrouves à la fin de la procédure de commande le panier correspondant au client qui en principe s'est identifié soit s'il a déjà un compte ou s'il entre ses infos.

2) Effectivement l'id est récupéré par chaque session_start() si le client ne ferme pas son naviguateur.
Cette fonction ouvre une session s'il n'existe pas de session déjà ouverte. Si une session a déjà été ouverte l'id de session est repris.

Pour cela tu dois avoir PHP a été compilé avec l'option –-enable-trans-sid et le php.ini configuré avec session.use_trans_sid à 1. La session est transmise de manière transparente.

3) Tu peux le faire avec le 2)
 
WRInaute discret
thierry8 a dit:
Mais la transparence ok, mais il doit tout de même y avoir un cookie.

Non. Ce parametre permet d'utilisé les session en mode id de session et donc sans cookie. Son avantage est d'eviter d'afficher l'id de session dans l'url.

thierry8 a dit:
Pourquoi si déjà activer par défaut ?
J'ai les diversses options (d'ailleurs en un 'soit' en debut de liste ;D)
Ca depend des ayutorisation que tu as sur ton hebergment ... En mutu, modifier le php.ini n'est pas possible donc tu le fait avec ini_set, par exemple.

thierry8 a dit:
Bizarre étant donné que cela est par défaut....
Donc la plupart utilise ce système.
Ou alors quelque chose d'autre m'échappe.

Il n'y a pas qu'a toi que quelques chose echappe ...
C'est incomprehensible, tout du moins pour moi et les wrinautes qui ont essaye de m'aider sur ce point... Quand on m'a xposé le probleme, c'est limite si je me suis pas foutu de la gueule du trackeur ... :'( Une belle lecon de modestie :oops:
 
WRInaute impliqué
moi au plus j'en lis sur les sessions au moins je comprends :?
et pourtant je dois ouvrir une boutique avec panier le mois prochain,
alors je suis vraiment mal barré :oops:

dites si j'ai bien compris :

hébergement mutualisé car petite boutique
donc j'ai pas accès au php.ini, donc je me sers de :
ini_set('session.use_trans_sid', '1');
ini_set('session.use_cookies', '0');

1) si on prend la procédure ci-dessus :
pas d'envoi de cookie, l'id de session est transmise par url mais de manière transparente.
ca marcherait ou pas pour les visiteurs et robots ?

2) phreddpullfer marque que ca marche comme cela, cependant quand je vais sur son site et que je refuse les cookies ca ne marche pas.
alors faut il obligatoirement un cookie ?

3) pourquoi thierry8 marque que malgré trans_sid il doit y avoir un cookie ?

4) si quelqu'un veut bien faire un résumé sur comment utliser les sessions ce serait vraiment super :)

je comprens plus rien !
merci de votre aide
 
Discussions similaires
Haut