簡體   English   中英

如何檢查在線和離線用戶asp.net

[英]How to check online and offline users asp.net

我正在開發網絡電視和視頻流門戶,只有注冊用戶才能訪問。 現在,我要檢查數據庫中保存的在線/離線用戶的列表。 用戶不需要像看電視頻道或視頻那樣在頁面之間移動,因此我認為上一次活動時間不會有幫助。 我需要ping Mac地址還是類似的東西? 我在所有論壇中進行了搜索,但仍然找不到合適的解決方案。

許多開發人員傾向於使用'Session_End'事件將用戶標記為“脫機”,但這並不是一個好主意,因為ASP.Net會話和用戶之間沒有一對一的映射。 例如,如果用戶在其工作站上打開2個Internet Explorer的單獨實例(例如2個單獨的IE進程),則他可以打開2個ASP.Net會話。 會話之一的'Session_End'事件並不一定意味着用戶處於脫機狀態,他們仍然可以使用網站。

此外, 'Session_End'事件僅在“ InProc”會話模式下可用。 如果您嘗試將會話狀態存儲在狀態服務器或SQL Server中,則“ Session_End”事件將永遠不會觸發。

我建議使用上次訪問時間作為理想的方法。 成員資格有助於構建用戶數據庫,並且有一種方便的方法可通過Membership.GetUser(stringuserName).IsOnline.來獲取它Membership.GetUser(stringuserName).IsOnline. 如果不使用成員資格,則可以使用下面的方法,該方法在成員資格中使用相同的原則:

在應用程序中,您可以定義一個全局詞典MembershipDictionary來存儲有關在線和離線用戶的信息。

在頁面中使用AJAX計時器(或客戶端JavaScript中的XmlHttpRequest )來更新用戶的LastVisitTime並將其間隔存儲到MembershipDictionary中。 時不時訪問字典的membershipDictionary過濾掉閑置的用戶(很長時間沒有訪問該頁面的用戶),並檢索仍然有多少用戶在線的信息。 定期維護可以在單獨的線程中或基於服務器的計時器中完成。 還請注意線程同步問題。

SignalR可能適合此操作。

您可能有一個集線器,所有用戶都連接到該集線器,然后每個用戶都會不時地在集線器上調用一個方法(適當的間隔是主觀的)。

您需要將每個用戶加入一個組,並且當該用戶不在該時間間隔內進行輪詢時,您將從該組中刪除該用戶,並將該用戶標記為脫機。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM