2014-09-02 58 views
0

我有一個網站,當用戶想要退出網站時,我想將我的數據庫中的用戶狀態設置爲0(離線),問題是我嘗試Page_Unload方法,但不起作用。提前感謝!退出網站時將數據庫的在線狀態設置爲離線ASP.NET

protected void Page_Unload(object sender, EventArgs e) 
{ 
    try 
    { 
    var conexiune = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
    var SetareOnline = new SqlCommand("Update [dbo].[Table] Set Online=0 Where([email protected])", conexiune); 
    SetareOnline.Parameters.AddWithValue("@UserName", Session["Login"].ToString()); 
    conexiune.Open(); 
    SetareOnline.ExecuteNonQuery(); 
    conexiune.Close(); 
    } 
    catch {} 
    finally {} 
} 
+1

設置斷點並設置調試器並檢查'Page_Unload'是否正在執行 – 2014-09-02 08:47:48

+0

也刪除空的catch。 – 2014-09-02 08:48:37

+0

好的,我檢查並執行Page_Unload方法 – 2014-09-02 09:01:18

回答

1

我想http協議是如何工作的混淆。 Page_Unload在服務器完成向客戶端提取頁面時被調用 - 這並不意味着客戶端主動退出您的網站。由於http是無狀態的,因此無法知道用戶何時退出您的網站(他可以查看您的單頁24小時,並且服務器不會注意,除非用戶將主動從您的域中獲取另一頁)。當客戶從不同的域中獲取頁面時,客戶端也不會向服務器發送通知。

鑑於寒冷的事實,我們通常妥協跟蹤「不活動的用戶」:

  • 對於您標記用戶爲活動的每一個請求,幷包括時間戳
  • 用戶被認爲是不活動的時候,他最後一次活動是比一些時間期限的(可以說15分鐘)

如果您需要在幾秒鐘內跟蹤活動/幾十秒,你需要建立一個死人開關

  • 在每一個頁面,你會擁有的javascript「萍兒」
  • 這平兒將AJAX請求您的Web服務 - 可以說,每30秒
  • 此WebService可以有空的實現,重要的是它具有給定用戶更新時間戳「LastActivity」
  • 如果用戶的最後一個活動比pinger的時間段長兩倍 - 比如說一分鐘,用戶被認爲是非活動的。

其他解決方法可能使用websockets。

+0

準確地說,這是我的問題。非常感謝您的幫助,我會嘗試另一種方式來檢查用戶何時退出該網站。 – 2014-09-02 09:24:40