asp.net下判斷使用者什麼時候離開,以什麼方式離開_實用技巧

來源:互聯網
上載者:User
網站使用者統計是每一個網站比有得功能,但是很少有人實現線上使用者統計得絕對精確或者說是相對精確,基於Web得原理,伺服器不會主動知道使用者通過關閉瀏覽器離開網站,這時候只能依靠伺服器端變數Session得到期來判斷使用者是否離開,但使用者瀏覽器是可以知道自己何時關閉得,代碼也非常簡單 

如下: 

function body_onunload() 



   if(window.event.clientX<0) 

   { 

          alert('the broswer is closing...'); 

   } 

    else 

    { 

         alert('the user is refreshing or navigating away...); 

    } 


以上代碼就會判斷使用者是關閉瀏覽器還是重新整理或者導航到其他頁面了! 


--------------------------------------------------------------------------------------------------- 
下午的時候,用代碼測試了一下,主要是利用上面的js函數,結合ajax技術,由於對ajax技術瞭解的不是很透徹,前後嘗試了三次。 
現將嘗試結果與大家分享,大家也多給點意見 
首先我嘗試了在ajax方法中訪問Application,企圖用Application變數來記錄線上人數。嘗試代碼: 
[AjaxPro.AjaxMethod] 
  public int Logoff()  
  {    
       Application["onlineCount"]=Convert.ToInt32(Application["onlineCount"])-1; 
      return      Convert.ToInt32(Application["onlineCount"]); 
  } 
嘗試失敗!估計是ajax不能訪問應用程式的靜態變數和Application變數。第一次使用AjaxPro不知道如何設定可以訪問Session,以前使用的是ajax.dll,設定成可以讀寫Session,嘗試結果可能發生改變! 
第二種我嘗試了用文字檔記錄線上人數,仍然失敗! 
第三中,採用資料庫!嘗試成功。 
代碼如下: 
[AjaxPro.AjaxMethod] 
  public int Logoff()  
  {    
   SqlConnection conn = new  SqlConnection("server=.;database=test; uid=sa;pwd=123"); 
   SqlCommand cmd = new SqlCommand("update OnlineCount set num=num-1",conn); 
   try 
   { 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
   } 
   catch(Exception ex) 
   { 
    EventLog.WriteEntry(ex.Source,ex.Message); 
   } 
   finally 
   { 
    conn.Close(); 
   } 

   cmd = new SqlCommand("select top 1 num from OnlineCount",conn); 
   try 
   { 
    conn.Open(); 
    return Convert.ToInt32(cmd.ExecuteScalar()); 
   } 
   catch(Exception ex) 
   { 
    EventLog.WriteEntry(ex.Source,ex.Message); 
   } 
   finally 
   { 
    conn.Close(); 
   } 
   return 0; 

  } 
前台頁面縮 


 1    <script language="javascript"> 
 2<!-- 
 3       function leave()  
 4       {  
 5          alert(window.event.clientX); 
 6          if(window.event.clientX<0) 
 7          { 
 8            WebApplication3.WebForm1.Logoff().value; 
 9          } 
10       } 
11//--> 
12        </script> 
13    </HEAD> 
14    <body onunload="leave()"> 
這樣的話,在對安全行和及時性要求比較嚴格的情礦下,將一個版面設定為首頁面,如果該頁面關閉,表示使用者已經退出。電子郵件系統就可以使用該方法。 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.