2016-09-02 95 views
1

我想問一下,我可以在Application_End註銷用戶嗎?我知道什麼時候Application_End調用Application_End global.asaxApplication_End註銷global.asax中的用戶

但是我只想知道是否讓所有用戶都在Application End註銷是正確的,我只想輸入用戶的註銷日期時間。

void Application_End(object sender, EventArgs e) 
    { 
     try 
     { 
      var LisLoginUsers = db.USER_LOGIN.Where(z => z.LOGOUT_DATETIME == null).ToList(); 
      if (LisLoginUsers.Count != 0) 
      { 
       for (int i = 0; i < LisLoginUsers.Count; i++) 
       { 
        LisLoginUsers[i].LOGOUT_DATETIME = System.DateTime.Now; 
        db.SaveChanges(); 

       } 
      } 
     } 
     catch (Exception msg) 
     { 
      ExceptionLogging.SendErrorToText(msg); 
      Response.Redirect("/Account/Error/"); 

     } 
    } 

回答

0

不,您不能使用Application_End在真實站點中記錄singout。

由於Application_End事件並不與任何請求綁定,因此您可能無法執行某些操作 - 您無法在特定用戶或重定向響應的某處執行操作(因爲沒有任何請求/響應)。

事實上,您可以在數據庫中清除或批量更新信息,但它不會實現您「輸入用戶的註銷日期時間」的實際目標。

應用程序關閉不受任何用戶行爲限制 - 它只涉及停止服務器端代碼,無論出於何種原因(即由於更新或不活動而重新啓動站點)。從用戶的角度來看,他們仍然可能正在查看網頁並認爲自己「已登錄」。

如果您的網站具有多臺服務器,則每臺服務器重新啓動時IIS服務器也不會關聯,因爲一臺服務器可以在其他重新啓動時主動提供服務請求,因此「」完全不適用於「用戶註銷」。

最好的辦法是通過顯式地(即從登錄開始40分鐘)超時用戶會話,或者通過更新每個請求/心跳AJAX ping頁面上的時間來實現滑動到期。

+0

Thankx男士,我會研究這個。 –