Bonjour,
Pour me familiariser avec les Cookies et continuer mon apprentissage dans le développement, je souhaiterais coder un script me permettant :
1 - Afficher les visiteurs actifs du site
2 - Afficher les visiteurs uniques (rafraîchissement à 0h00)
3 - Afficher les visiteurs uniques sur une période données

J'aurais voulu faire cela grâce aux cookies mais je ne sais pas trop comment partir.

Mon idée pour les visiteurs actifs
- Je créais un cookie d'une durée de vie de 2 minutes.
- Je créais une variable que j'incrémente pour chaque nouveau cookie

Mon idée pour les visiteurs actifs
- Je créais un cookie d'une durée de vie allant jusqu'à 0h00
- Je créais une variable que j'incrémente pour chaque nouveau cookie différent de celui d'origine ($_SERVER['REMOTE_ADDR'])

Est ce une bonne réflexion pour partir dans le code ?

Mercizavous !
Je ferais beaucoup plus simple et sans cookie:

A chaque connexion, récupérer l'IP de la personne qui se connecte par $_SERVER['REMOTE_ADDR']
Stocker l'IP et l'heure de connexion dans un fichier "log-YYYY-MM-DD.txt", avec YYYY-MM-DD la date du jour
Quand je veux savoir qui a fait quoi, je lis et je traite mon fichier par un petit programme PHP.
C'est tout.

Tu peux bien entendu créer un cookie comme tu le proposes et l'incrémenter, mais de toute façon tu n'échapperas pas au fichier de log sur le serveur, sinon tu n'auras pas la possibilité de faire des statistiques.

La différence avec l'IP c'est que si tu inventes un nouveau cookie pour chaque utilisateur qui n'en n'a pas à la première connexion, tu pourras distinguer les engins connectés au même réseau familial, par exemple chez nous nous avons chacun un PC, un téléphone et une tablette, soit 6 appareils pour deux personnes. Mais je ne vois pas vraiment l'intérêt de modifier ce cookie avec un compteur à chaque connexion: il suffit de compter dans le serveur.

J'espère avoir été clair.
Modifié par PapyJP (23 Feb 2015 - 18:43)
Actuellement je fonctionne de la manière suivante :
Je récupère l'id de l'internaute connecté et l enregistre dans ma BDD
Je rafraîchis toutes les 2 minutes pour savoir si il est en train de navigué ou bien si il est resté connecté sur le site et parti faire des courses.
Si time() ne bouge pas je l'efface de la BDD sinon je met a jour time().
Enfin je compte le nombre total de donnée dans la BDD.
Cela me permet de calculer le nombre d'utilisateur actifs en direct.

Les infos que je souhaite doivent pouvoir s'afficher en temps réel.

Je m'oriente vers les cookies car il me semble que tous les trackers fonctionnent avec les Cookies. Et deplus de mon côté je souhaite approfondir cette technique...

Merci en tous les cas de ton retour
S'il s'agit d'utilisateurs engegistrés, c'est encore plus simple.

Laisse tomber les timers (pourquoi un intervalle de 2 minutes et pas une ou 3 ?) et enregistre tous les appels. Une étude a posteriori des appels te permettra d'avoir une vue précise du comportement de chacun. Quand je regarde les cookies laissés sur mon PC par les sites dans lesquels je suis enregistré, je ne trouve pas grand chose.

Maintenant si ton objectif est d'utiliser des cookies, tu peux toujours le faire, mais à mon avis ça ne sert pas à grand chose. Apprendre à utiliser les cookies ce n'est pas seulement apprendre comment on les lit ou on les écrit, mais surtout à quoi ils peuvent servir.
Tu devrais plutôt regarder comment utiliser les sessions, si ton hébergeur te laisse les utiliser.
Re.
Il s agit de n importe quel utilisateur. Dans un premier temps je souhaite avoir un simple tableau de bord comme je l ai citer dans mon premier post.
L utilisation d un timer permet de verifier si l internaute est actif. Enfin sur un utilisateur unique cela me permet de ne pas recuperer des infos sur un utilisateurs qui est deja passe par la 20 minutes plus tot.
Pas que je ne prends pas compte ton avis mais j aimerais d autres avis.

Merci encore de tes messages
Salut Smiley smile

Un petit avis complémentaire Smiley smile

les cookies, bien qu'utile sont de moins en moins utilisés Smiley smile

Surtout avec des utilisateurs enregistrés, pou rles visites uniques ce n'est pas non plus forcément la meileure méthode...

Pour les connectés TA solution actuelle est parmis les meilleures Smiley smile c'est toujours améliorable Smiley cligne masi tu es sur la bonne voie Smiley smile

Ensuite pou rles visiteurs uniques qui ne sont donc pas forcément enregistré, je te conseille pou rma part une TABLE de suivi avec ip et session enregistrée... l'ip ne change pas sur 24h (enfin plsu maintenant) et la session bah elle ne change qu'avec une nouvelle connection tu as donc toutes les infos pour conaitre les visiteurs unique sur une journée
Merci de ce retour,
Qui rejoint celui de Mr JP. Je vais donc m'orienter vers les Sessions. Mais alors, suite au message précédent :

"Tu devrais plutôt regarder comment utiliser les sessions, si ton hébergeur te laisse les utiliser."

Que dois-je vérifier ?

merci à vous.
c'est assez simple ::)

fait une page php

et vérifie que $_SESSIOn contient quelque chose ou tout du moins que ça ne te retourne pas d'erreur Smiley cligne

au besoin fait des tests de session pour voir comment réellement ton hébergeur les utilises Smiley cligne
Ok.
Petit complément d'infos : je suis sous CakePHP (framework)

Je créer une Session de cette façon :


$this->Session->write('Visit.ip', $_SERVER['REMOTE_ADDR'],array('timeout' => '3'));	
var_dump($_SESSION);


J'ai bien la Session qui s'affiche.
Du coup j'enregistre l'IP de l'internaute, et pour la session, j'enregistre quelle information ?

Merci
Pour la session fait un echo pour être sur, mais tu devrais avoir session_id() de renseigné...

il est unique à chaque session Smiley smile
Bonjour...
Voilà, j'ai avancé sur mon projet de stats grâce à vos remarques et aussi aux infos glanées ici et là.
Je vous présente mon code qui permet d'enregistrer dans ma table des infos sur les utilisateurs connectés
ID-IP-SESSION-NAME-PAGE sont les infos que je récupère ou que j'update si il est déjà enregistré.


public function whoCounter() {
   // Récupération du nom de l'utilisateur connecté si il est partenaire :
   $user = ClassRegistry::init('User');
   $user = $this->Auth->user('username');
    if ($user != null)
    {
	$userConnect = $this->Auth->user('username');
    }
	else
    {
	$userConnect = 'internaute';
     }
		
$connecte = ClassRegistry::init('Connecte');
$page = substr(Router::url($this->here, true ), 47);
$timestamp_2min = time() - (60 * 2); // 60 * 2 = nombre de secondes écoulées en 2 minutes
$connecte->deleteAll(array('Connecte.timestamp <' => $timestamp_2min));
$sessionExist = $connecte->find('count',array('conditions'=>array('Connecte.session'=> $this->Session->Id())));
$ipExist = $connecte->find('count',array('conditions'=>array('Connecte.ip'=> ip2long($_SERVER['REMOTE_ADDR']))));
		
		
    if ($ipExist == 0)
    {
         if ($sessionExist == 0) // Si il n'y en a pas, on l'ajoute
    {	
$connecte->data = array( array(	
						'ip' => ip2long($_SERVER['REMOTE_ADDR']),
						'session' => $this->Session->Id(),
						'name' => $userConnect,
						'timestamp' => time(),
						'page' => $page
						), 
					); 
$connecte->saveAll($connecte->data);
	}
	else
	{
	$connecte->updateAll(array('Connecte.timestamp'=> time()), array('Connecte.session' => $this->Session->Id()));	
	}
	}
	else
	{	

	$connecte->updateAll(
				array(
					'Connecte.session' => "'".$this->Session->Id()."'",
					'Connecte.name' => "'".$userConnect."'",
					'Connecte.timestamp' => time(),
					'Connecte.page' => "'".$page."'"
					),
				array('Connecte.ip' => ip2long($_SERVER['REMOTE_ADDR']))
				);
		}



Cela fonctionne relativement bien, mais quelques améliorations devront être faites.

J'ai un souci avec :


$page = substr(Router::url($this->here, true ), 47);


qui me retourne "'/Num%C3%A9risation-de-diapositives-n%C3%A9gatifs-p'" donc des caractères spéciaux alors que dans le même temps si je fait

$test = 'écureuil';

Cela me retourne bien les accents
Bonjour
Et pour simplement compter les visites SANS les robots? Y a t il une solution simple? C est pour l hyper modeste phipop com
Pitié ne regardez pas le code... Smiley confused
Merci beaucoup
philippe
Bonjour
Et pour compter tout simplement les visiteurs d un site SANS les robots?
Y a t il une solution simple?
c est pour l hyper modeste phipop com...
( pitié ne regardez pas le code.. Smiley confused )
Merci beaucoup
Philippe Smiley smile