2009-02-20 26 views
5

Trong nghiên cứu của tôi để tìm cách tạo PHP cho tôi biết có bao nhiêu người 'trực tuyến' trên trang web của tôi, tôi đã khám phá ra rằng có nhiều cách để 'ước tính' điều này.kịch bản để cho tôi biết ai và số lượng người dùng đang trực tuyến

Tôi đã chọn đăng nhập mọi thứ xảy ra trên trang web, cũng vì mục đích quản lý lỗi, nhưng bây giờ tôi bị kẹt khi viết truy vấn SQL của mình.

Về cơ bản tôi có một cơ sở dữ liệu với 'IP', 'userid' và 'datetime' và tôi đã tìm thấy một truy vấn như thế này sẽ làm các trick:

SELECT distinct(IP), datetime 
FROM `bigBrother` 
WHERE datetime BETWEEN DATE_SUB(NOW(), INTERVAL 3 MINUTE) AND NOW() 

Vấn đề là trang web của tôi chủ yếu là xem và được sử dụng bởi các sinh viên trên mạng lưới trường học, và ... tất cả họ đều có cùng địa chỉ IP. Vì vậy, câu hỏi là, tôi có làm điều này đúng không, và tôi có thể chọn hai hàng riêng biệt từ cơ sở dữ liệu của mình không, để tôi có thể phân loại người dùng đã đăng ký (người sẽ có 'userid' - những người khác sẽ có userid = 0)?

Trả lời

3

Sử dụng cookie thay vì địa chỉ IP.

PHP giúp dễ dàng với cơ chế phiên. Trên mỗi đầu tiên bạn thực hiện một session_start() và sau đó bạn sử dụng giá trị được trả về bởi session_id() làm số nhận dạng của khách truy cập mà bạn có thể đặt trong cơ sở dữ liệu của mình.

+0

bạn có thể giải thích thêm một chút không? – Jasper

2

Tôi đã tạo một hệ thống cho trang web trường học đã yêu cầu tính năng này và đây là cách tôi đã làm.

tôi đã có một bảng của người dùng, trong bảng đó có một lĩnh vực được gọi là "online_time"

Trên mỗi trang một hàm được gọi nếu người dùng đã đăng nhập trong đó cập nhật các "online_time" đến thời điểm hiện tại của người dùng đó. (unixtime)

Sau đó, tôi đã có chức năng "Ai đang trực tuyến" đã xem "online_time" và hiển thị tất cả người dùng có thời gian trực tuyến trong 5 phút cuối cùng.

EDIT để bình luận:

Bạn có thể làm cho các chức năng tương tự lưu các phiên id trong bảng khác và thời gian nó đã được cứu. Id phiên là duy nhất cho người dùng đang duyệt, vì vậy bạn có thể nhận được số lượng phiên id hoạt động trong vòng 5 phút cuối cùng.

session_id() 
+0

Tôi cũng đã có, quản trị viên cũng muốn biết có bao nhiêu người đang trực tuyến - vì vậy tôi cũng cần người dùng chưa đăng nhập – Jasper

Các vấn đề liên quan