Cách tôi làm là ping định kỳ một trình xử lý đặc biệt bằng AJAX (một lần trong 30 giây). Đó là rất nhiều yêu cầu, vì vậy thay vì cập nhật bảng người dùng trực tuyến mỗi lần với lần truy cập cuối cùng, tôi đang cập nhật memcache. Tôi chỉ cập nhật bản ghi cơ sở dữ liệu khi nó chậm hơn bản ghi memcache 5 phút (bạn có thể chọn độ trễ lớn hơn hoặc nhỏ hơn tùy thuộc vào tải). Sau đó, cron job sẽ xóa các bản ghi cũ khỏi bảng người dùng trực tuyến.
Để kiểm tra xem một người dùng cụ thể có trực tuyến hay không, tôi chỉ cần kiểm tra bản ghi memcache của anh ta. Sai số không bao giờ quá 30 giây. Cơ sở dữ liệu không bao giờ chậm quá 5 phút, vì vậy kết quả từ cơ sở dữ liệu cũng khá chính xác.
Tôi cũng sử dụng các yêu cầu định kỳ này để đẩy các sự kiện tới người dùng.