7
votes

Comment mettre en place un compteur de page Web fiable?

Qu'est-ce qu'un bon moyen de mettre en œuvre un compteur de page Web?

Sur la surface Il s'agit d'un problème simple, mais il est problématique lorsque vous traitez avec les robots de recherche de moteurs de recherche et des robots, de multiples clics par le même utilisateur, rafraîchissez les clics.

Spécifiquement ce qui est un bon moyen de s'assurer que les liens ne sont pas simplement «cliqués» par l'utilisateur en cliquant à plusieurs reprises? Adresse IP? Biscuits? Ces deux ont quelques inconvénients (les adresses IP ne sont pas nécessairement uniques, les cookies peuvent être éteints).

Aussi quelle est la meilleure façon de stocker les données? Incrémenter un compteur individuellement ou stocker chaque clic sous forme d'enregistrement dans une table de journaux, puis résumez de temps en temps.

Une expérience en direct serait utile,

+++ rick ---


4 commentaires

Vous posez une question très difficile. Pensez simplement à la manière dont Google traite du problème de la fraude de clic et vous aurez une idée de la taille de votre question.


Je suis d'accord .. Pas un problème facile. Bien que je me suis toujours demandé pourquoi les serveurs Web n'offrent pas de bonnes solutions d'analyse. Je dis gifle Google Analytics sur elle et appelez-le terminé. Sauf si vous essayez de réinventer la roue cassée certes.


Compris, mais c'est pourquoi je demande ici: -}. Je ne suis pas vraiment après Analytics ici, mais un comptoir similaire à celui-ci sur Donc, pour montrer le nombre de points de vue au moins semi-fiable.


Est-ce la Rick Strahl?


4 Réponses :


0
votes

Si vous utilisez PHP, vous pouvez utiliser des sessions pour suivre l'activité d'utilisateurs particuliers. En conjonction avec une base de données, vous pouvez suivre l'activité d'adresses IP particulières que vous pouvez assumer sont le même utilisateur.

Utilisez des horodatages pour limiter les hits (supposez pas plus de 1 hit par 5 secondes, par exemple), et de dire lorsque de nouvelles "visites" sur le site se produisent (si le dernier coup était il y a plus de 10 minutes, par exemple).

Vous pouvez trouver des propriétés $ _Server [] qui vous aident à détecter les bottes ou les tendances des visiteurs (telles que l'utilisation du navigateur).

EDIT: J'ai déjà suivi des coups et des visites, comptant une vue de page comme un coup et +1 à la visite lors de la création d'une nouvelle session. C'était assez fiable (plus que suffisamment fiable aux fins que je l'ai utilisée. Les navigateurs qui ne soutiennent pas les cookies (et donc ne soutiennent pas les sessions) et les utilisateurs qui désactivent les sessions sont assez rares de nos jours, donc je ne vous inquiéterais pas. à ce sujet à moins qu'il y ait une raison d'être excessivement précis.


2 commentaires

Les adresses IP ne sont pas fiables à long terme


Utilisation d'ASP.NET (MVC) et bien que la session est une option ne va pas aider à l'accès aux cookies des robots. Plus la session a un peu de surcharge que cette application n'aurait pas besoin.



4
votes

Utilisez les adresses IP conjointement avec des sessions. Comptez chaque nouvelle session pour une adresse IP comme un coup contre votre comptoir. Vous pouvez stocker ces données dans une base de données de journaux si vous pensez que vous aurez jamais besoin de regarder à travers elle. Cela peut être utile pour calculer lorsque votre site obtient le plus de trafic, combien de trafic par jour, par IP, etc.


0 commentaires

0
votes

Si j'étais toi, j'abandonnerais mon comptoir être précis en premier lieu. Chaque solution (par exemple les cookies, les adresses IP, etc.), comme vous l'avez dit, a tendance à être peu fiable. Donc, je pense que votre meilleur pari est d'utiliser la redondance dans votre système: utilisez des cookies, des "cookies flash" (objets partagés), des adresses IP (peut-être conjointement avec des agents utilisateur) et des ID utilisateur pour les personnes connectées.

Vous pouvez implémenter une sorte de schéma dans lequel tout client inconnu reçoit un identifiant unique, qui est stocké (espérons-le) sur la machine du client et ré-transmise avec chaque demande. Ensuite, vous pouvez attacher une adresse IP, un agent utilisateur et / ou un identifiant d'utilisateur (plus tout ce que vous pouvez penser) à chaque identifiant unique et vice-versa. L'horodatage et l'identifiant unique de chaque clic pourraient être enregistrés dans une table de base de données quelque part, et chaque clic (au moins, cliquez sur votre site Web) pourrait être laissé à travers ou refuser en fonction de la récente le dernier clic utilisé pour le même identifiant unique. Ceci est probablement assez fiable pour les rafales de clic à court terme et à long terme, cela n'aurait pas beaucoup d'importance de toute façon (pour le problème de click-up, pas le compteur de page).

Les robots sympathiques doivent avoir leur agent utilisateur défini de manière appropriée et peuvent être vérifiés sur une liste des agents utilisateur de robot connus (j'ai trouvé un ici après une simple recherche Google) afin d'être correctement identifiée et traitée séparément de vraies personnes.


1 commentaires

Merci Cameron. C'est là que je suis à ce stade. Le point de la question a été de voir s'il existe de meilleures approches disponibles.



2
votes

Alors j'ai joué avec cela un peu basé sur les commentaires ici. Ce que j'ai proposé, c'est compter un comptoir dans un champ simple. Dans mon application, j'ai des entités d'extraits de code avec une propriété de vues.

Lorsqu'un extrait est considéré comme une méthode filtre (liste blanche) exactement ce qui devrait être des navigateurs: p>

ALTER PROCEDURE [dbo].[LogSnippetClick]
    -- Add the parameters for the stored procedure here 
    @SnippetId AS VARCHAR(MAX),
    @IpAddress AS VARCHAR(MAX)          
   AS
   BEGIN

    SET NOCOUNT ON;

    -- check if don't allow updating if this ip address has already 
    -- clicked on this snippet in the last 2 minutes
    select Id from SnippetClicks 
        WHERE snippetId = @SnippetId AND ipaddress = @IpAddress AND 
              DATEDIFF(minute,  Entered, GETDATE() ) < 2      

     IF @@ROWCOUNT = 0  
     BEGIN              
        INSERT INTO SnippetClicks 
            (SnippetId,IpAddress,Entered) VALUES 
            (@SnippetId,@IpAddress,GETDATE())         
        UPDATE CodeSnippets SET VIEWS = VIEWS + 1 
            WHERE id = @SnippetId
     END
     ELSE
     BEGIN
        -- clean up
        DELETE FROM SnippetClicks WHERE DATEDIFF(minute,Entered,GETDATE()) > 4
     END
END


0 commentaires