網站使用者統計是每一個網站比有得功能,但是很少有人實現線上使用者統計得絕對精確或者說是相對精確,基於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()">
這樣的話,在對安全行和及時性要求比較嚴格的情礦下,將一個版面設定為首頁面,如果該頁面關閉,表示使用者已經退出。電子郵件系統就可以使用該方法。