web-dev-qa-db-fra.com

API Joomla pour identifier si un nouveau visiteur?

Existe-t-il une API ou une possibilité d'identifier dans joomla si l'utilisateur est un nouveau visiteur, qui visite la page pour la première fois ou une période définie écoulée?

Pour être précis, l’utilisateur n’est pas un utilisateur joomla enregistré, c’est un simple visiteur anonyme, qui nous rend visite pour la première fois (jamais auparavant sur la page) ou qui nous rend visite après 30 jours d’inactivité.

Ma question est donc la suivante: y at-il une API joomla pour identifier si l’utilisateur est nouveau ou si l’utilisateur nous a déjà visités depuis un certain temps?

3
cilap

En supposant que vous ayez configuré une table de base de données pour cela, vous pouvez utiliser le code suivant pour effectuer votre vérification:

// This function is taken from my own extension
public function getIpAddress()
{
    $server   = $this->app->input->server;
    $clientIp = $server->get('HTTP_CLIENT_IP');
    $httpFwd  = $server->get('HTTP_X_FORWARDED_FOR');

    if (!empty($clientIp))
    {
        $ip = $clientIp;
    }
    elseif (!empty($httpForwarded))
    {
        $ip = $httpForwarded;
    }
    else
    {
        $ip = $server->get('REMOTE_ADDR');
    }

    // If we don't have a valid IP address just return null
    if (filter_var($ip, FILTER_VALIDATE_IP) === false)
    {
        return null;
    }

    return filter_var($ip, FILTER_VALIDATE_IP);
}

// Get the users' IP
$userIP = getIpAddress();

// Check to see if the IP already exists in the database
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->qn('ip'))
    ->from($db->qn('#__mytable'))
    ->where($db->qn('ip') . ' = ' . $db->q($userIP));
$db->setQuery($query);

$result = $db->loadResult();

// Check if the result is not empty
if (!empty($result))
{
    // We have a match, the users' IP already exists in the database
    // You can perform some action here
}
else
{
    // The IP doesn't exists in the database, let's add it
    $object = new stdClass();
    $object->ip = $userIP;

    $result = JFactory::getDbo()->insertObject('#__mytable', $object);
}

J'ai ajouté quelques commentaires dans le code pour vous montrer ce qui se passe, mais sachez que je ne l'ai pas testé.

Vous devrez bien sûr apporter quelques modifications mineures au code, telles que le changement du nom de la table de la base de données.

Important: Vous devrez informer tous les utilisateurs que vous stockez leur adresse IP à des fins GDPR.

J'espère que cela t'aides

3
Lodder

Juste pour clarifier quelques points: je ne pense pas que rien ne puisse dire cela, pas seulement dans Joomla mais dans le Web. Sous certaines conditions, vous pourrez peut-être savoir si un navigateur donné était récemment sur votre site, par exemple. comme ce que fait G. Analytics pour compter les nouveaux visiteurs par rapport aux anciens, ce qui est une solution basée sur les cookies.

Mais il n’existe pas de réelle précision sur ces métriques. Par conséquent, si vous essayez d’implémenter des éléments critiques spécifiques à partir de ces informations, vous ne pouvez tout simplement pas.

En gardant cela à l'esprit, vous devez clarifier et affiner ou modifier vos exigences concernant ce que vous essayez de faire, en fonction de ce qui est réellement réalisable.


Mise à jour pour votre commentaire:

Je ne sais pas exactement comment Google le gère, mais brièvement, d'après ce que j'ai lu sur le sujet, GAnalytics JS installe un cookie sur le navigateur de l'utilisateur et lui attribue un identifiant unique, également stocké sur le serveur de Google. Donc, dans le cas où cet utilisateur reviendrait, GA), JS lit le cookie et sait que cet utilisateur le renvoie.

Je ne sais pas avec certitude, mais je suis presque certain que Joomla ne fournit rien de tel - et franchement, je ne pense pas que Joomla doive fournir quelque chose comme ça.

Mais selon ce que vous voulez réellement faire, cela peut être aussi simple que de définir un cookie dans le navigateur de l'utilisateur.

1
FFrewin

Je suis descendu dans ce terrier de lapin il y a plusieurs années dans le cadre d'une entreprise autodidacte. Vous pouvez aller jusqu'à exploiter un mélange de serveurs et de clients pour détecter/analyser/détecter un périphérique.

La vérité est que toutes les données que vous souhaitez traiter:

  • peut être usurpé/contourné
  • peut naturellement fluctuer/varier suffisamment pour déclencher votre algorithme
  • peut être manquant en fonction de l'appareil/navigateur

Je veux dire, regardez, vous pouvez vérifier:

  • Adresse IP
  • Agent utilisateur
  • Dimension de l'écran/de la fenêtre
  • Plate-forme
  • Langue de l'utilisateur
  • Plugins
  • ...et plus

et vous pouvez obtenir une "très bonne" empreinte digitale sur votre utilisateur, mais vous ne pouvez jamais être sûr à 100% de la détection.

Si vous essayez de faire preuve de courtoisie (et non d'émettre une fenêtre popup agaçante s'il s'agit d'un visiteur assidu), vous pouvez vous engager dans cette voie.

En fin de compte, je vous recommanderais d’adopter une approche plus judicieuse et de demander à vos utilisateurs de s’inscrire afin que vous puissiez leur offrir une meilleure expérience utilisateur.

1
mickmackusa

Personnellement, je ne mettrais pas cette pression (vérifier si le visiteur est nouveau ou pas) sur le serveur qui alimente le site Web de Joomla, car j'ai constaté les dégâts qu'une analyse personnalisée peut causer sur un site Web de Joomla. Je voudrais le jeter sur Google Analytics comme décrit ici .

0
itoctopus