Bonjour à tous,
Après plus d'une semaine de galère et de recherche sur le net (et sur ce forum), je me décide à vous exposer mon projet... et le soucis que je n'arrive guère à comprendre
Je travaille actuellement sur un petit outil de tracking pour de petites campagnes mail.
Le fonctionnement du script est des plus trivial pour le moment :
- Les liens de la créa mail pointent vers mon serveur qui récupère l'identifiant de l'annonceur et l'email qui a reçu ce dernier.
- Lors du clic, l'internaute est tout d'abord redirigé vers mon serveur, les informations sont stockés en BDD (pour les stats nombre de clicks) et le script "tente" (car c'est ici que ça coince) de créer un cookie sur le poste client avec pour information -> son email + identifiant de l'annonceur.
- Lorsque l'internaute remplit le formulaire, la page de confirmation contient un pixel de tracking qui appelle une page sur mon serveur avec l'identifiant de l'annonceur.
- Cette page teste si le poste client possède bien mon cookie et cas échéant récupère les infos et les stocke en BDD.
Voici grosso modo le fonctionnement actuel du script.
Ma page de création Cookie + Redirection page formulaire
Suite à de nombreux tests, il apparaît que c'est lors de cette étape que mon processus bug... La création des cookies est en effet plus qu'aléatoire. Lors de mes tests ça ne pose aucun soucis, le cookie est bien crée et le processus fonctionne à chaque fois... Par contre, en production, il apparaît que le Cookie est crée 1 fois sur 10... Je n'arrive pas à localiser ce qui cloche Il peut-être utile de préciser que le suivi des clics est opérationnel, mes stats étant similaires aux reportings Emailvision
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 $bdd=new PDO(); //connexion à ma BDD // Fonction de création COOKIE function initCookie($params){ foreach($params as $key=>$value){ setCookie($key,$value,time() + 30*24*3600, '/track/','.ndd.fr',FALSE,TRUE); } } if(isset($_GET['i'])&&isset($_GET['email'])){ // On teste les variables GET $params=array('annonceur'=>$_GET['i'],'email'=>$_GET['email']); // Je teste si la campagne existe bien en BDD $sql="SELECT c_id,c_lien FROM campagne WHERE c_id = ".$_GET['i']; $mysql=$bdd->query($sql); $result=$mysql->fetch(PDO::FETCH_OBJ); // Si oui je fait mes traitements (créa cookie + redirection) if($result==1){ $link=$result->c_lien; // Création cookie initCookie($params); // Insertion BDD pour les stats clics $sql="INSERT INTO clicks(ck_email,ck_date,ck_c_id) VALUES ('".$_GET['email']."','".date('Y-m-d G:i:s')."','".$_GET['i']."')"; $mysql=$bdd->query($sql); // Redirection vers la page formulaire header("Location: ".$link.""); exit(); } }
Récupération Cookie pour stats formulaire rempli
Je teste si la campagne existe bien en BDD, si le cookie est présent et correspond bien à l'annonceur passé en GET par mon pixel de tracking. Cas échéant j'enregistre les données en BDD et je détruis les cookies...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 // Connexion BDD $bdd=new PDO(); // Fonction qui détruit les Cookies présents sur le poste Client function destroyCookie($cookieTemp){ foreach($cookieTemp as $key=>$value){ setcookie($key,'',time() - 30*12*3600,'/track/','.ndd.fr',FALSE,TRUE); unset($_COOKIE[$key]); } } // Je teste si l'id de l'annonceur est bien renseigné if(isset($_GET['trk_client_id'])&&!empty($_GET['trk_client_id'])){ // Je teste si l'id correspond bien à une campagne en base $sql="SELECT c_id FROM campagne WHERE c_id = ".$_GET['trk_client_id']; $mysql=$bdd->query($sql); $result=$mysql->fetch(PDO::FETCH_OBJ); if($result==1){ // Si oui je teste si les cookies existent bien et que l'id passé en GET correspond bien à l'id Annonceur du cookie client if(isset($_COOKIE['email'])&&!empty($_COOKIE['email'])&&$_COOKIE['annonceur']==$_GET['trk_client_id']){ $sql="SELECT l_id FROM leads WHERE l_email='".$_COOKIE['email']."'"; $cookieTemp=array('email'=>$_COOKIE['email'],'annonceur'=>$_COOKIE['annonceur']); $mysql=$bdd->query($sql); $result=$mysql->fetch(PDO::FETCH_OBJ); // Je teste si le client n'a pas déjà effectué d'inscription pour éviter les doublons if($result==0){ // Si nouvel inscription j'enregistre les infos en BDD et j'appelle la fonction qui supprime les cookies $sql="INSERT INTO leads(l_email,l_date,l_c_id) VALUES ('".$_COOKIE['email']."','".date('Y-m-d G:i:s')."','".$_GET['trk_client_id']."')"; $mysql=$bdd->query($sql); if($mysql==TRUE){ destroyCookie($cookieTemp); } } } } }
Pixel de tracking
Ce dernier se trouve dans le code de la page de confirmation qui fait suite à l'inscription.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <img src="http://ndd.tld/lds.php?trk_client_id=9" height="0" width="0" />
Comme préciser précédemment, mes tests démontrent (ou pas ) que le problème pourrait se situer au niveau du premier script... Lors des tests sur hébergement lambda (OVH + O2Switch) le processus se déroule sans accroc mais coince lors de véritables routages tests... Je ne récupère qu'à peine 10% des inscriptions
Je me tiens à votre disposition pour toute précision & cie
Merci à vous.
Cdt
Leptik
Partager