2010-08-10 13 views
0

모든 사용자가 페이지에 머문 시간을 가져와 해당 정보를 데이터베이스에 삽입해야합니다.Asp.Net 및 javascript에서 사용자 사용 시간 가져 오기

페이지가로드 될 때 자바 스크립트 값에 시작 시간을 할당합니다. on body onunload 함수 나는 시작 시간과 종료 시간 사이의 시간차를 계산하여 데이터베이스에 삽입 할 수 있습니다.

스크립트 관리자를 사용하고 EnablePageMethods가 true로 설정됩니다. 그리고 onunload를 호출하는 javascript 함수에서 pagemethods를 사용하여 웹 메서드를 호출합니다.

Firefox에서 제대로 작동하는 것 같습니다. 그러나 크롬과 IE에서는 작동하지 않습니다.

당신이 아무 것도 모르겠다. 나는 정말로 그것을 잃어 버리고 있기 때문이다. 미리 감사드립니다.

스크립트 관리자 코드는 다음과 같습니다

[System.Web.Services.WebMethod] 
     public static void ClosePage(int milliseconds) 
     { 
      try{ 
       // Insert millisecond to database... 
      } 
      catch 
      { } 
     } 
+0

ExitPage를 호출하는 방법을 보여줄 수 있습니까? – Kenoyer130

+0

sure : –

+0

당신은 이미 이것을 알고있을 것입니다. 그러나 어쨌든 그것을 말할 것입니다 - 데이터가 매우 부정확 할 것입니다. 브라우저가 망가지는 사람들에 대한 데이터는 없습니다. 당신은 백그라운드에서 탭을 열어 두는 사람들로부터 오랜 시간을 얻습니다. 매번이 탭을 다시로드하여 자주 브라우저를 재시작하는 사람들로부터 잘못된 방문자 수를 얻게됩니다. – Timwi

답변

1

하나는 클라이언트 측에 대한 jQuery를 사용하고 C#을과에 대한 asp.net 웹 서비스 백엔드. jQuery는 대부분의 경우 다른 브라우저에서 작동하기 때문에 매력처럼 작동합니다.

+0

사용자가 사이트에 머문 시간을 계산하는 솔루션에 대해 저에게 말씀해 주시겠습니까? –

+1

jquery load()로로드 할 때 시간을 얻을 수 있고 jquery unload() 메소드로 언로드 할 때의 차이를 계산할 수 있습니다. 그 후에 간단한 아약스 전화를 걸고 페이지에 머문 시간을 업데이트 할 수 있습니다. –

+0

예 당신이 대략 말한 것처럼 했어요. –

2

내가해야하는 경우 :

function ExitPage() { 
     try { 
     var leavingTime = new Date(); 
     alert("entering: " + enteringTime); 
     alert("exiting: " + leavingTime); 
     var diff = leavingTime - enteringTime; 
     alert("diff: " + diff); 
     alert(window.location); 

     } 
     catch (Err) { 
      alert("Before error:" + Err.Description); 
     } 

     try { 

      alert("Before PageMethods Call"); 

      PageMethods.set_path('SomePage.aspx'); 
      PageMethods.ClosePage(diff,onSuccess,onFail); 
     } 
     catch (Err) { 
      alert("Error In PageMethods Block:" + Err.Description); 
     } 

     alert("Before Return"); 
     return false; 

    } 

    function onSuccess() { 
     alert("Success"); 
    } 

    function onFail() { 
     alert("Fail"); 
    } 

C# 코드가 같은 것입니다 :

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> 
         </asp:ScriptManager> 

JS 코드는 같은 것입니다 이 나는 사용자가 온라인에있는 서버에보고 것이 js 클럭을 구현할 것이다. 동일한 세션 ID를 가진 첫 번째 및 마지막 레코드는 사용자가 사이트에서 소비 한 시간을 나타냅니다. 같은

JS 뭔가 :

$.post("/KeepSessionAlive.ashx", null, function() { 
    LastConnectionTime=new Date(); 
} 

이 문제에 내가 찾을 수있는 최고의 솔루션의

public void ProcessRequest(HttpContext context) { 
    context.Session["KeepSessionAlive"] = DateTime.Now; 
    //etc 
} 
+0

그 당시의 정확한 해결책은 아니지만 그 아이디어에 +1했습니다. 감사. –

+0

10 분마다 요청을 보내 라이브 분을 늘릴 것입니다. 대략, 라이브 기간을 계산할 것입니다 –

관련 문제