2009-07-29 30 views
7

Cách tốt để thực hiện bộ đếm trang Web là gì?Làm cách nào để triển khai bộ đếm trang web đáng tin cậy?

Trên bề mặt, đây là một vấn đề đơn giản, nhưng nó có vấn đề khi xử lý các trình thu thập thông tin và rô bốt của công cụ tìm kiếm, nhiều lần nhấp bởi cùng một người dùng, làm mới các nhấp chuột.

Cụ thể cách nào để đảm bảo liên kết không chỉ được người dùng nhấp vào 'nhấp lên' bằng cách nhấp liên tục? Địa chỉ IP? Bánh quy? Cả hai điều này đều có một vài nhược điểm (Địa chỉ IP không nhất thiết là duy nhất, có thể tắt cookie).

Ngoài ra, cách tốt nhất để lưu trữ dữ liệu là gì? Tăng số lượt truy cập riêng lẻ hoặc lưu trữ từng nhấp chuột dưới dạng bản ghi trong bảng nhật ký, sau đó tóm tắt đôi khi.

Bất kỳ kinh nghiệm sống sẽ là hữu ích,

+++ Rick ---

+1

Bạn đang đặt một câu hỏi rất khó. Chỉ cần suy nghĩ về cách Google xử lý vấn đề mfraud nhấp chuột và bạn sẽ nhận được ý tưởng về mức độ lớn có thể là vấn đề của câu hỏi của bạn. – backslash17

+0

Tôi đồng ý .. không phải là một vấn đề dễ dàng .. mặc dù tôi đã luôn luôn tự hỏi tại sao máy chủ web không cung cấp các giải pháp phân tích tốt. Tôi nói tát Google Analytics vào nó và gọi nó là xong .. trừ khi bạn đang cố gắng để tái tạo lại các bánh xe bị thừa nhận bị hỏng. – madcolor

+0

Đã hiểu, nhưng đó là lý do tại sao tôi hỏi ở đây: -}. Tôi không thực sự sau khi phân tích ở đây, nhưng một truy cập tương tự như ở đây trên SO để hiển thị số lượt xem ít nhất là bán đáng tin cậy. –

Trả lời

2

Vì vậy, tôi đã chơi xung quanh với điều này một chút dựa trên các nhận xét tại đây. Những gì tôi nghĩ ra là đếm số lượt truy cập trong một lĩnh vực đơn giản. Trong ứng dụng của tôi, tôi có các thực thể đoạn mã với thuộc tính Chế độ xem.

Khi một đoạn được xem là một phương pháp lọc ra (danh sách trắng) chỉ là những gì hy vọng sẽ được các trình duyệt:

public bool LogSnippetView(string snippetId, string ipAddress, string userAgent) 
{ 
    if (string.IsNullOrEmpty(userAgent)) 
     return false; 

    userAgent = userAgent.ToLower(); 

    if (!(userAgent.Contains("mozilla") || !userAgent.StartsWith("safari") || 
     !userAgent.StartsWith("blackberry") || !userAgent.StartsWith("t-mobile") || 
     !userAgent.StartsWith("htc") || !userAgent.StartsWith("opera"))) 
     return false; 

    this.Context.LogSnippetClick(snippetId, IpAddress); 
} 

Các thủ tục lưu trữ sau đó sử dụng một bảng riêng biệt để tạm thời giữ quan điểm mới nhất mà lưu trữ các đoạn Id , đã nhập ngày và địa chỉ ip. Mỗi chế độ xem được ghi lại và khi một chế độ xem mới xuất hiện, nó được kiểm tra để xem liệu cùng một địa chỉ IP đã truy cập đoạn mã này trong vòng 2 phút vừa qua chưa. nếu không có gì được ghi lại.

Nếu đó là chế độ xem mới, chế độ xem được ghi lại (một lần nữa SnippetId, IP, Đã nhập) và trường Chế độ xem thực tế được cập nhật trên bảng Đoạn trích.

Nếu đó không phải là chế độ xem mới, bảng sẽ được dọn sạch với bất kỳ chế độ xem nào đã đăng nhập cũ hơn 4 phút. Điều này sẽ dẫn đến số lượng mục nhập tối thiểu trong bảng Nhật ký xem bất kỳ lúc nào.

Đây là proc lưu trữ:

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 

Điều này dường như làm việc khá tốt. Khi những người khác đề cập đến điều này không hoàn hảo nhưng có vẻ như nó đủ tốt trong thử nghiệm ban đầu.

0

Nếu bạn nhận được để sử dụng PHP, bạn có thể sử dụng phiên theo dõi hoạt động từ những người dùng cụ thể. Kết hợp với cơ sở dữ liệu, bạn có thể theo dõi hoạt động từ các địa chỉ IP cụ thể mà bạn có thể giả định là cùng một người dùng.

Sử dụng dấu thời gian để giới hạn số lần truy cập (giả sử không quá 1 lần truy cập mỗi 5 giây) và để biết thời điểm "lượt truy cập" mới xảy ra (nếu lần truy cập cuối cùng cách đây hơn 10 phút) .

Bạn có thể tìm thấy thuộc tính $ _SERVER [] giúp bạn phát hiện bot hoặc xu hướng khách truy cập (chẳng hạn như sử dụng trình duyệt).

chỉnh sửa: Tôi đã theo dõi lần truy cập & lượt truy cập trước đây, tính lượt xem trang dưới dạng lượt truy cập và +1 cho lượt truy cập khi tạo phiên mới. Trình duyệt không hỗ trợ cookie (và do đó, không hỗ trợ phiên) và người dùng vô hiệu hóa phiên là khá phổ biến hiện nay, vì vậy tôi sẽ không lo lắng về việc này trừ khi có lý do chính xác quá mức, hãy

+0

Địa chỉ IP không đáng tin cậy trên cơ sở lâu dài – Cameron

+0

Sử dụng ASP.NET (MVC) và mặc dù Phiên là một tùy chọn không giúp ích cho việc truy cập cookie từ robot. Cộng với phiên có một chút chi phí mà ứng dụng này nếu không sẽ không cần. –

4

Sử dụng Địa chỉ IP cùng với Phiên. Đếm mỗi phiên mới cho địa chỉ IP là một lần truy cập vào bộ đếm của bạn. Bạn có thể lưu trữ dữ liệu này trong cơ sở dữ liệu nhật ký nếu bạn nghĩ Điều này có thể hữu ích khi tính toán khi trang web của bạn nhận được nhiều lưu lượng truy cập nhất, bao nhiêu lưu lượng truy cập mỗi ngày, trên mỗi IP, v.v.

0

Nếu tôi là bạn, tôi sẽ từ bỏ truy cập của tôi là chính xác ngay từ đầu. Mọi giải pháp (ví dụ: cookie, địa chỉ IP, v.v.), như bạn đã nói, có xu hướng không đáng tin cậy. Vì vậy, tôi nghĩ rằng đặt cược tốt nhất của bạn là sử dụng dự phòng trong hệ thống của bạn: sử dụng cookie, "Flash-cookies" (đối tượng được chia sẻ), địa chỉ IP (có thể kết hợp với tác nhân người dùng) và ID người dùng cho những người đã đăng nhập.

Bạn có thể thực hiện một số loại lược đồ mà bất kỳ khách hàng không xác định nào được cấp một ID duy nhất, được lưu trữ (hy vọng) trên máy của khách hàng và được truyền lại với mọi yêu cầu. Sau đó, bạn có thể buộc địa chỉ IP, tác nhân người dùng và/hoặc ID người dùng (cộng với bất kỳ thứ gì khác bạn có thể nghĩ) vào mọi ID duy nhất và ngược lại. Dấu thời gian và ID duy nhất của mỗi nhấp chuột có thể được ghi vào bảng cơ sở dữ liệu ở đâu đó và mỗi nhấp chuột (ít nhất, mỗi nhấp chuột vào trang web của bạn) có thể bị bỏ qua hoặc bị từ chối tùy thuộc vào cách nhấp chuột cuối cùng cho cùng một ID duy nhất. Điều này có thể đủ đáng tin cậy cho các nhấp chuột ngắn hạn, và lâu dài nó sẽ không quan trọng nhiều (cho vấn đề nhấp chuột, không phải là bộ đếm trang).

Robot thân thiện nên đặt đại lý người dùng của họ một cách thích hợp và có thể kiểm tra danh sách các đại lý người dùng robot đã biết (Tôi đã tìm thấy một số here sau một tìm kiếm đơn giản của Google) để được xác định và xử lý riêng biệt một cách riêng biệt.

+0

Cảm ơn Cameron. Đây là nơi tôi đang ở thời điểm này. Điểm của câu hỏi là để xem liệu có cách tiếp cận nào tốt hơn không. –

Các vấn đề liên quan