2009-03-21 4 views
5

저는 C# 2005와 함께 ASP .Net 2.0을 사용하는 웹 사이트를 개발하고 초보자입니다. 아니오를 계산하는 기능을 추가하고 싶습니다. 내 웹 사이트 방문자 수 Global.asax를 사용하여이 기능을 추가하기위한 기본 정보를 수집했습니다. system.web 섹션 아래에 ""행을 추가하여 Web.config를 수정했습니다.방문자 카운터 구현

방문자 수를 유지하기 위해 테이블을 사용하고 있습니다. 그러나 나는 그 일을 어떻게 끝내야할지 모른다. 내 기본 Global.asax 파일은 Application_Start, Application_End, Application_Error, Session_Start 및 Session_End의 각기 다른 섹션과 함께 제공됩니다. Application_Start 섹션에서 카운터의 현재 값을 추출하고 전역 변수에 저장하려고했습니다. 나는 Session_Start의 카운터를 증가시키고 수정 된 값을 Application_End의 테이블에 쓴다.

공용 서브 루틴/함수를 사용하려고했습니다. 하지만 그 서브 루틴은 어디에 두어야합니까? Global.asax 자체에 서브 루틴을 추가하려고했습니다. 그러나 이제 Global.asax에서 Data.SqlClient에 대한 참조를 추가 할 수 없으며 기능을 구현하기 위해 SqlConnection, SqlCommand, SqlDataReader 등의 참조가 필요하므로 오류가 발생합니다. 각 서브 루틴에 클래스 파일을 추가해야합니까? 나를 안내 해줘.

내 웹 사이트에 추적 기능을 구현하고 IP 주소, 사용 된 브라우저, 방문 날짜 및 시간, 내 웹 사이트 방문자의 화면 해상도 등을 저장하고 싶습니다. 내가 어떻게 해?

제안을 기다리는 중입니다.

더 그랜드 쿠마 Barik

+0

나는 이것을 확인했으며 System.Data.SQLClient를 참조 할 수있었습니다. 네임 스페이스를 사용하고 클래스를 사용하여 global.asax 파일의 DB에 연결했습니다. 어떤 오류가 발생하고 있습니까? –

+0

System.Dat를 사용하여 참조를 추가하고있었습니다. a.SqlClient; Global.asax에서 오류가 발생했습니다. 이제 Global.asax에서 <% @ Import Namespace = "System.Data.SqlClient"%>로 변경했으며 오류가 발생하지 않았습니다. 모든 페이지/폼에서 액세스 할 수있는 전역 변수를 구현하는 방법 ?? 랄리트 쿠마 바릭 – LalitBarik

답변

1

Google 분석 스크립트가 정확히 필요한 것입니다. 세션이기 때문에 크롤러도 열립니다.

+0

또 다른 방법은 IIS 로그 파일을 사용하고, 구문 분석을 제공하는 많은 도구가 존재합니다. – omoto

3

사용 Google Analytics. a) 바퀴가 원하는 것을하지 않거나 b) 바퀴가 어떻게 작동하는지 알아 내려고하지 않는 한 바퀴를 재발 명하려고하지 마십시오.

+0

친절한 답장을 보내 주셔서 감사합니다. Google 웹 로그 분석을 제안대로 사용하겠습니다. 하지만 여전히 내 지식을 배우고 확장하기 위해 적어도 내 자신의 스타일/방문객 카운터 버전을 추가하는 데 관심이 있습니다. ASP.Net 2.0에서 공용/공통 함수 및 전역 변수를 구현하는 방법을 알고 싶습니다. L.K. Barik – LalitBarik

+0

Gareth> Google 웹 로그 분석을 사용하는 경우 웹 페이지에 방문자 수를 표시하는 방법은 무엇입니까? 또는 내가 사용할 수있는 다른 웹 방문자 카운터는 내부 URL이나 adv를 넣지 않습니까? – Jasper

1

이미 사용 가능한 Gareth 제안 만 사용할 수 있습니다 트래픽 분석. 웹 사이트의 트래픽에 Google 데이터를 제공하려는 생각이 맘에 들지 않는다면 로그 파일을 다운로드하여 많은 web server log file analysis tools 중 하나를 사용하여 분석 할 수도 있습니다.

+0

Adrian> Google Analytics를 사용하는 경우 웹 페이지에 방문자 수를 표시하는 방법은 무엇입니까? 또는 내가 사용할 수있는 다른 웹 방문자 카운터는 내부 URL이나 adv를 넣지 않습니까? – Jasper

6

순진한 구현을 위해 사용자 정의 HttpModule을 사용할 수 있습니다. 응용 프로그램에 대한 각 요청에 대해 당신이 거라고 :

  1. 확인을 Request.Cookies이 추적 쿠키
  2. 추적 쿠키가 존재하지 않는 경우가 포함되어있는 경우,이, 다른 자신의 쿠키 아마 새로운 방문자 (또는 만료 됨 - 4 참조)
  3. 신규 방문자의 경우 방문자 통계를 기록한 다음 방문자 수를 업데이트하십시오.
  4. 방문자에게 보내지는 응답에 추적 쿠키를 추가하십시오. 이 쿠키를 만료 기간이 길도록 설정하면 쿠키가 만료 된 재 방문 사용자에게 많은 "오 탐률"이 발생하지 않습니다.
    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 
        } 
    } 
    

    는 웹에 다음과 같은 줄을 추가하여이 모듈을 등록

여기 (로 StatsCounter.cs 저장) 아래의 일부 골격 코드입니다.설정 파일 :

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

(웹 응용 프로그램 프로젝트의 이름으로 변경하거나 웹 사이트 프로젝트를 사용하는 경우이를 제거

는 희망이 당신이 실험을 시작하려면 충분한 수 있습니다.. 다른 사람들이 지적했듯이 실제 사이트의 경우 Google (또는 다른 일부) 분석 솔루션을 사용하는 것이 훨씬 낫습니다.