2009-03-21 46 views
5

Tôi là người mới và đang phát triển một trang web sử dụng ASP .Net 2.0 với C# 2005. Tôi muốn thêm một cơ sở để đếm số không. khách truy cập vào trang web của tôi. Tôi đã thu thập các thông tin cơ bản để thêm tính năng này bằng cách sử dụng Global.asax. Tôi đã sửa đổi Web.config bằng cách thêm dòng "" trong phần system.web.Thực hiện bộ đếm khách truy cập

Tôi đang sử dụng một bảng để giữ số lượng khách truy cập. Nhưng tôi không biết cách hoàn thành nhiệm vụ. Tệp Global.asax mặc định của tôi có các phần khác nhau Application_Start, Application_End, Application_Error, Session_Start và Session_End. Tôi đã cố gắng trích xuất giá trị hiện tại của bộ đếm trong phần Application_Start và lưu trữ trong một biến toàn cục. Tôi sẽ tăng truy cập trong Session_Start và viết giá trị sửa đổi vào bảng trong Application_End.

Tôi đã cố gắng sử dụng các chương trình con/chức năng công khai. Nhưng tôi nên đặt những chương trình con đó ở đâu? Tôi đã cố gắng thêm các chương trình con trong chính Global.asax. Nhưng bây giờ tôi nhận được lỗi, vì tôi không thể thêm tham chiếu đến Data.SqlClient trong Global.asax và tôi cần tham chiếu đến SqlConnection, SqlCommand, SqlDataReader, vv để thực hiện các tính năng. Tôi có phải thêm tệp Lớp cho từng chương trình con không? Xin vui lòng hướng dẫn cho tôi.

Tôi cũng muốn triển khai tính năng theo dõi cho trang web của mình và lưu trữ địa chỉ IP, trình duyệt được sử dụng, ngày và giờ truy cập, độ phân giải màn hình v.v ... của khách truy cập trang web của tôi. Tôi làm nó như thế nào?

Đang chờ đề xuất.

Lalit Kumar Barik

+0

Tôi đã kiểm tra điều này và có thể tham khảo System.Data.SQLClient không gian tên và sử dụng các lớp để kết nối với một DB trong tệp global.asax. Bạn đang gặp phải lỗi gì? –

+0

Tôi đã thêm tham chiếu khi sử dụng System.Dat a.SqlClient; trong Global.asax và gặp lỗi. Bây giờ tôi đã thay đổi thành <% @ Import Namespace = "System.Data.SqlClient"%> trong Global.asax và không geeting bất kỳ lỗi nào. Làm thế nào để thực hiện một biến toàn cục có thể truy cập trong TẤT CẢ các trang/biểu mẫu ?? Lalit Kumar Barik – LalitBarik

Trả lời

1

Tập lệnh phân tích Google chính xác là những gì bạn cần. Vì phiên, cũng sẽ mở cho các trình thu thập thông tin.

+0

Một cách khác là sử dụng tệp nhật ký IIS, tồn tại rất nhiều công cụ cung cấp phân tích cú pháp của chúng. – omoto

3

Sử dụng Google Analytics. Đừng cố gắng phát minh lại bánh xe trừ khi a) bánh xe không làm những gì bạn muốn hoặc b) bạn chỉ đang cố gắng tìm hiểu cách thức hoạt động của bánh xe

+0

Cảm ơn câu trả lời của các bạn. Tôi sẽ sử dụng Google Analytics như được đề xuất. Nhưng tôi vẫn quan tâm đến việc thêm phong cách/phiên bản truy cập của riêng tôi, ít nhất là để tìm hiểu và mở rộng kiến ​​thức của tôi. Tôi muốn biết làm thế nào để thực hiện một chức năng công cộng/phổ biến và các biến toàn cầu trong ASP.Net 2.0. L.K. Barik – LalitBarik

+0

Gareth> Nếu một người sử dụng Google Analytics, thì làm cách nào để hiển thị Số lượng khách truy cập trên trang web của bạn? HOẶC Bất kỳ người truy cập trang web nào khác mà tôi có thể sử dụng mà không đặt URL của riêng nó hoặc quảng cáo bên trong nó? – Jasper

1

Tôi chỉ có thể đề nghị Gareth đề xuất sử dụng phân tích lưu lượng truy cập. Nếu bạn không thích ý tưởng cung cấp dữ liệu của Google trên lưu lượng truy cập trang web của mình, bạn cũng có thể tải xuống tệp nhật ký và phân tích chúng bằng một trong nhiều số web server log file analysis tools khả dụng.

+0

Adrian> Nếu một người sử dụng Google Analytics, thì làm cách nào để hiển thị Số lượng khách truy cập trên trang web của bạn? HOẶC Bất kỳ người truy cập trang web nào khác mà tôi có thể sử dụng mà không đặt URL của riêng nó hoặc quảng cáo bên trong nó? – Jasper

6

Để thực hiện ngây thơ, bạn có thể sử dụng HttpModule tùy chỉnh. Đối với mỗi yêu cầu đến ứng dụng của bạn, bạn sẽ:

  1. Kiểm tra nếu Request.Cookies bao gồm một Tracking Cookie
  2. Nếu cookie theo dõi không tồn tại, đây có lẽ là một người truy cập mới (nếu không, cookie của họ đã hết hạn - xem 4.)
  3. Đối với khách truy cập mới, hãy đăng nhập số liệu thống kê khách truy cập, sau đó cập nhật số lượng khách truy cập
  4. Thêm cookie theo dõi vào phản hồi được gửi lại cho khách truy cập. Bạn sẽ muốn đặt cookie này để có thời gian hết hạn khá dài, do đó bạn không nhận được nhiều "mặt tích cực" với người dùng cũ có cookie đã hết hạn.

Dưới đây là một số mã bộ xương dưới đây (tiết kiệm như StatsCounter.cs):

using System; 
using System.Data; 
using System.Web; 
using System.Web.Security; 
using System.Transactions; 

namespace hitcounter 
{ 
    public class StatsCounter : IHttpModule 
    { 
     // This is what we'll call our tracking cookie. 
     // Alternatively, you could read this from your Web.config file: 
     public const string TrackingCookieName = "__SITE__STATS"; 

     #region IHttpModule Members 

     public void Dispose() 
     { ;} 

     public void Init(HttpApplication context) 
     { 
      context.BeginRequest += new EventHandler(context_BeginRequest); 
      context.PreSendRequestHeaders += new EventHandler(context_PreSendRequestHeaders); 
     } 

     void context_PreSendRequestHeaders(object sender, EventArgs e) 
     { 
      HttpApplication app = sender as HttpApplication; 
      HttpResponse response = app.Response; 
      if (response.Cookies[TrackingCookieName] == null) 
      { 
       HttpCookie trackingCookie = new HttpCookie(TrackingCookieName); 
       trackingCookie.Expires = DateTime.Now.AddYears(1); // make this cookie last a while 
       trackingCookie.HttpOnly = true; 
       trackingCookie.Path = "/"; 
       trackingCookie.Values["VisitorCount"] = GetVisitorCount().ToString(); 
       trackingCookie.Values["LastVisit"] = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"); 

       response.Cookies.Add(trackingCookie); 
      } 
     } 

     private long GetVisitorCount() 
     { 
      // Lookup visitor count and cache it, for improved performance. 
      // Return Count (we're returning 0 here since this is just a stub): 
      return 0; 
     } 

     void context_BeginRequest(object sender, EventArgs e) 
     { 
      HttpApplication app = sender as HttpApplication; 
      HttpRequest request = app.Request; 

      // Check for tracking cookie: 
      if (request.Cookies[TrackingCookieName] != null) 
      { 
       // Returning visitor... 
      } 
      else 
      { 
       // New visitor - record stats: 
       string userAgent = request.ServerVariables["HTTP_USER_AGENT"]; 
       string ipAddress = request.ServerVariables["HTTP_REMOTE_IP"]; 
       string time = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"); 
       // ... 
       // Log visitor stats to database 

       TransactionOptions opts = new TransactionOptions(); 
       opts.IsolationLevel = System.Transactions.IsolationLevel.Serializable; 
       using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, opts)) 
       { 
        // Update visitor count. 
        // Invalidate cached visitor count. 
       } 
      } 
     } 

     #endregion 
    } 
} 

đăng ký mô-đun này bằng cách thêm các dòng sau vào Web của bạn.cấu hình file:

<?xml version="1.0"?> 
<configuration> 
    ... 
    <system.web> 
     ... 
     <httpModules> 
      <add name="StatsCounter" type="<ApplicationAssembly>.StatsCounter" /> 
     </httpModules> 
    </system.web> 
</configuration> 

(Replace with tên của dự án ứng dụng web của bạn, hoặc loại bỏ nó nếu bạn đang sử dụng một dự án website

Hy vọng rằng, đây sẽ là đủ để giúp bạn bắt đầu thử nghiệm.. Tuy nhiên, như những người khác đã chỉ ra, đối với một trang web thực tế, bạn nên sử dụng giải pháp phân tích của Google (hoặc một số khác) cho việc này.

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