Đừng bận tâm với việc tìm ra sự khác biệt giữa các múi giờ. Điều đó không cần thiết.
Bất cứ khi nào người dùng truy cập một trang, hãy cập nhật một trường trong bản ghi của họ về bảng Người dùng được cập nhật lần cuối. Sau đó, thực hiện một truy vấn cho tất cả người dùng có thời gian cập nhật lần cuối trong vòng 5 phút qua. Hơn thế nữa, và chúng được coi là "ngoại tuyến".
Nếu bạn sử dụng thời gian máy chủ của mình, thông qua hàm NOW () trong MySQL, bạn sẽ tính toán từng bước sự khác biệt giữa các múi giờ.
Đây là cách tiêu chuẩn để theo dõi số lượng người dùng hiện đang trực tuyến (Có nghĩa là, hoạt động trong vài phút qua).
Cập nhật liên tục
Nếu bạn muốn biết chúng vẫn hoạt động ngay cả khi chúng không nhảy từ trang này sang trang khác, hãy bao gồm một chút javascript để ping máy chủ của bạn cứ sau 60 giây hoặc lâu hơn để cho bạn biết chúng vẫn còn sống. Nó sẽ hoạt động theo cách giống như đề xuất ban đầu của tôi, nhưng nó sẽ cập nhật hồ sơ của bạn mà không yêu cầu họ phải điên cuồng duyệt trang web của bạn ít nhất năm phút một lần.
var stillAlive = setInterval(function () {
/* XHR back to server
Example uses jQuery */
$.get("stillAlive.php");
}, 60000);