Về cơ bản, những thứ này hoạt động như sau.
Mỗi khi người dùng thực hiện hành động (làm mới cuộc trò chuyện, tin nhắn đã gửi, truy cập trang, v.v.), mã thông báo được liên kết với người dùng (mã thông báo được lưu trong máy chủ của bạn, chẳng hạn như DB) được cập nhật theo thời gian hiện tại.
| User ID | Last action |
-------------------------------------
| 14 (mark) | 2012-02-09-10:34:53 |
| 56 (phil) | 2012-02-09-09:12:34 |
| 9 (john) | 2012-02-09-10:33:11 |
Và sau đó bạn quyết định một người dùng là trực tuyến nếu mã thông báo của anh ấy không quá cũ (5/10 phút?)
Bạn có thể cải thiện phương pháp này nếu bạn sử dụng AJAX để gửi yêu cầu định kỳ đến máy chủ sau mỗi 1 phút hoặc lâu hơn. Yêu cầu AJAX này cập nhật giá trị mã thông báo. Vì vậy, bằng cách này, bạn có thể biết người dùng cũng đang trực tuyến nếu anh ta không làm gì khác ngoài việc nhìn chằm chằm vào trang. Và khi anh ta thoát (đóng trình duyệt hoặc tab), cuộc gọi định kỳ AJAX ngừng hoạt động, vì vậy sau 5/10 phút người dùng được tuyên bố là ngoại tuyến .
Chúc bạn thành công!