09/10/2018, 22:41
Xem có bao nhiêu người đang online trong forum
Mình đang viết 1 forum = PHP, làm thế nào để biết có bao nhiêu người đang online trong forum?
Bài liên quan
Giả sử bảng thành viên có trường status chỉ trạng thái của người đang on/off line.
Giả sử 0 là offline, 1 là online. Ai đăng nhập(login) vào thì bạn gán status là 1. Vậy thì khi muốn hiển thị số người đang online chỉ cần dùng 1 lệnh sql
select count(*) from thanhvien where status=1;
Khi người dùng đã quit rồi thì sao ? Có cách nào để set status lại off không ?Nếu không sau 1 thời gian thì status đều = online hết ?
dùng ipaddress , timer, và userid để nhận biết số người online,
- một người guest truy cập sẽ có ipaddress
- nếu đăng nhập thành công tức là member -> sẽ có userid
- nếu mà sau thời gian để tính online (ví dụ 5 phút) nếu mà người đó không sử dụng nữa -> delete cái row này là xong.
không biết ý kiến này có được không?
thân chào
Thông thừơng thì mình dùng session để check. Mỗi người log vào thường có 1 session khác nhau, và session sẽ tồn tại nếu người đó còn xử dụng website mình trong thời gian nào đó. Còn nếu để lâu session sẽ tự expired. Như vậy bạn chỉ cần store session id 1 lần vào table rồi mỗi khi có người login thì check coi session có bị expired chưa, không phải update nhiều lần. Nếu kết hợp session và IP thì kết quả chính xác hơn. Nhưng trong trường hợp forum thì không cần thiết, vì mỗi user chỉ được log in 1 lần nên không thể mang 2 sessions 1 lúc được.
Không đúng đâu bạn ơi, cái này mình có đọc ở diễn đàn nào khác rồi nhưng không nhớ. Bởi vì bạn chỉ check có online không khi thấy cần thiết, ví dụ như check ở trang index của diễn đàn này, hoặc ở các thread thì chỉ check những ai có bài viết ở thread đó nên việc check chỉ thực hiện ở những trang này thôi. Thêm nữa là ở mỗi user có 1 trường ghi lại thời gian của hoạt động cuối cùng do đó ở những trang này (index hoặc các threads) chỉ check thời gian hiện tại trừ đi thời gian mà họ có hành động cuối cùng trong website coi có nhỏ hơn thời gian bạn đặt để check online không (vd 5 phút).
Còn xóa session thường thì là 20 phút (theo mặc định) nên thường không chính xác, còn nếu bạn đặt thời gian mặc định ngắn lại thì gây bất tiện cho người dùng và làm nặng tải của server.
Viết có vẻ dài dòng hơi khó hiểu
Vấn đề ở đây là tránh server phải chạy update không cần thiết. Hãy lấy 1 thí dụ để dễ hiểu hơn: lúc 10 giờ, 1 user log in vào thì bạn log người đó vào table Login chẳng hạn(giả sử expired time là 5 phút)
- Lúc 10:03, người đó click vào 1 chỗ nào khác. Nếu không dùng session, thì program sẽ check lại table Login, rồi update time access (như vậy người đó sẽ tồn tại tới 10:08)
- Lúc 10:06, người đó lại click vào 1 chỗ khác, và program lại check table login và update lần nữa ... Cứ check và update như vậy mỗi khi user click.
- Theo ý bạn là không cần thiết update khi user hoạt động, thì lúc 10:06 user đó đã đã coi như không tồn tại nữa rồi cho dù lúc 10:03, user vẫn còn xử dụng...
Nhưng xử dụng session thì program không phải làm việc nhiều, vì session tự update khi user còn click vào chỗ nào đó. Program chỉ check session có expired hay không mà thôi không cần biết lần cuối người đó hoạt động trên website là lúc nào.
-Bạn dùng session để kiểm tra, nếu session hết hạn thì có nghĩa là người đó không còn online. Nhưng thời gian để session hết hạn thường là dài (20'). Điều đó có nghĩa là nếu 19' truớc đây người đó không có hoạt động nào trong website nhưng vẫn đuợc coi là online?
-Nếu bạn giảm thời gian hết hạn của session xuống để kiểm tra cho chính xác hơn (vd 5') thì 1 người nào đó đọc bản tin dài hơn 5 phút tự động bị coi là đã chấm dứt hoạt động tại website và bị buộc login lại.
-Điều quan trọng nữa là mình không biết có cách nào kiểm tra session của người khác còn hay không trừ phi bạn tự quản lý vấn đề ghi session cho riêng mình.