|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : décembre 2006 Messages : 17 ![]() |
Bonjour tout le monde,
j'ai commencé réaliser une toplist en php/sql et je me vois à présent dans l'obligation d'utiliser des sessions pour tenter de sécuriser un peu le compte des In / Out des liens. Cependant le hic c'est que je n'y connaissais strictement rien en session, j'ai donc passé énormément de temps à collecter des informations concernant les sessions mais rien n'a résolu mon probleme. Je voudrais savoir comment faire en sorte que lorsqu'un visiteur arrive sur ma toplist il ne puisse pas cliquer 20 fois de suite sur un lien pour faire monter le compteur des "In" pour faire grimper ce site dans le classement (A chaque click, le champ sql correspondant au in du site est incrémenté). Il faudrait donc qu'au premier click le champ sql soit mis a jour, mais qu'aux prochains aucune mis a jour ne se fasse. J'ai vu qu'il fallait au début initialisé une session grâce à session_start(); ce qui aura pour effet de créer le cookie PHPsessid mais après je n'ai aucune idée de la marche à suivre, s'il faut ou non utliser sql, ou encore s'il faut interagir avec l'ip du visiteur etc Si vous pouviez m'éclairer un peu, je vous serais reconnaissant Merci d'avance. |
|
|
00
|
|
|
#2 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 39 ![]() |
Tu ne peux pas utiliser des Session pour ce que tu veux faire.
En effet, si l'utilisateur quitte et réouvre son navigateur, son identifiant de session sera différent, et il crééra donc une nouvelle session, donc pourra faire monter le site une seconde fois. Il faut donc que tu récupères l'ip de ton visiteur et que tu la stocke dans une base de donnée, avec le lien sur lequel il a cliqué. Astuce pour récuperer l'IP même si il y a un proxy : Code :
Code :
$query est la requete mysql que vous souhaitez executer. |
||||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : décembre 2006 Messages : 17 ![]() |
Mais la session est dans un cookie non? Si je met par exemple un temps de d'expiration d'une journée, je reconnaitrais le visiteur pendant une journée grace au cookie?
|
|
|
00
|
|
|
#4 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 39 ![]() |
(j'ai édité mon message plus haut avec plus de détails)
Sinon, non, puisque les sessions sont des cookies, mais enregistrer sur le serveur web, alors que les cookies sont stocké sur l'ordinateur du client et dépendent de chaque navigateur. On peut donc facilement supprimer les cookies de notre PC au travers des options du navigateur. Quant aux sessions, comme je le disais plus haut, à chaque fois qu'on ferme et qu'on ré ouvre notre navigateur, l'identifiant de session change, et donc le serveur nous reconnaît comme deux personnes distinctes. |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : décembre 2006 Messages : 17 ![]() |
Merci pour ces éclaircissements
Concernant la récupération du lien sur lequel le visiteur a cliqué, j'ai du mal à cerner comment je peux faire. Je partirais sur l'idée de rajouter un évènement dans la balise <a> sur le click avec ta fonction get_ip() ainsi que l'insertion dans la base sql de l'id du site cliqué avec l'ip, mais dans ce cas la, je dois passer par du javascript si je me souviens bien? |
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 39 ![]() |
Non, pas tout à fait, il vaut mieux utiliser une autre manière, car on ne peut mélanger le javascript avec le php. Le javascript s'exécute sur le navigateur du client et n'est pas activé chez tout le monde, alors que le php s'exécute lorsque le serveur génère la page. Le javascript est donc exécuter sur la page en cour, déjà générée par le serveur, mais ne peut basiquement communiquer avec le serveur.
Pour résoudre ton problème, il ne faut pas utiliser des liens direct vers le site, mais des liens vers une page de ton site avec en paramètre l'id du site sur lequel tu veux pointer. Cette page de ton site va récupérer dans ta base de donnée l'adresse du site correspondant à cet ID, et va incrémenter son nombre de hit de 1, si et seulement si cette utilisateur(enfin son IP) n'a pas déjà fait incrémenter ce site au cour des dernière 24heures. Et finalement une fois ces opérations effectuée, redirigera le visiteur vers le site visé. Donc dans ta base de donnée tu auras 2 tables comportant ces structures : La première : id (auto_incrément), nom du site, description, nb_hit La deuxième : id (auto_incrément), id_site, ip, last_vote La page vers laquelle est dirigé le visiteur en cliquant sur le lien, il clique sur <a href="go.php?id=430"> La page go.php : $ip=get_ip(); //l'ip du demandeur $id_site=$_GET['id']; //on récupère l'id du site cliqué, ici : 430 maintenant, on cherche dans la base de donnée, dans la seconde table, lorsque `id_site`='$id_site' et que `ip`='$ip' et que `last_vote`>time()-24*60*60, si la base de donnée ne retourne rien, le visiteur n'a pas cliqué pour ce site, on peut donc faire deux requêtes mysql, la première pour augmenter de 1 le nombre de hit de la première table, et la deuxième, on insert dans la seconde table, une nouvelle ligne contenant l'ip du visiteur, l'id du site (430) et le timestamp du moment où il click. Tant qu'a faire, on supprime de la table 2, grâce à une troisième requête, les ligne datant de plus de 24heures. |
|
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Inscription : décembre 2006 Messages : 17 ![]() |
Merci énormément pour ta réponse, j'ai à présent tout compris !
Tu viens de me donner une bonne lecon de logique car je n'étais vraiment pas partie du même coté que toi et pourtant quand je vois ton raisonnement, tout me parait clair :p Mon seul et dernier probleme cependant reste purement programmation car je ne sais pas comment interpreter le non renvoie d'information de la requete sql. Code :
C'est ma dernière question je te le promet, et merci encore pour ton aide |
||
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 39 ![]() |
De rien
Je crois qu'il faut utiliser : if(empty($site)) //si $site est vide si ça ne marche pas tu peut utiliser : if($site['id_site']=='') //c'est celle que j'utilisais avant, je te la donnes, car je sais pas si la première fonctionne lol A et aussi tu feras gaffe, dans ta requete tu mets $site[ip] au lieu de $ip je crois. |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : décembre 2006 Messages : 17 ![]() |
Exact c'est bien $ip qu'il faut mettre ^^
Tout marche parfaitement je te remercie énormément pour toute l'aide que tu m'as apporté Je te souhaite une bonne année en avance aussi tiens |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com