09/10/2018, 18:18

hỏi về cách nhận biết thành viên nào đang online bằng php ?

hi các bạn,

Các bạn có cách nào hông, chì mình với. Bắt lỗi ngay cả trường hợp member không bấm nút logout mà tắt trực tiếp browser. Và mình không muốn dùng cookies.

Cám ơn trước.
NumPad0 viết 20:28 ngày 09/10/2018
Nếu không muốn sử dụng cookies bạn có thể sử dụng cơ chế quản lý session như IBF với CSDL MySQL.
Hệ thống sẽ kiểm tra sid của session và IP. Nếu trong CSDL tồn tại một record có những thông số sid và IP trùng với user đang duyệt trang, và thời gian timeout chưa quá quy định thì cấp quyền duyệt trang tiếp. Nếu không thì bắt user phải đăng nhập lại.
--------------------
Còn chuyện kiểm tra sự kiện unload của Form IE thì không thể. Vì khi bạn nhận được nội dung HTML của trang là khi đó là trình duyệt đã ngắt conn với server. Bạn đang nghĩ đến việc sử dụng Javascript. Câu trả lời lại càng là không vì chính trình duyệt là kẻ đang thông dịch javascript cho bạn.
-------------------
Muốn để hủy session khi user không logout mà close browser. Bạn sử dụng thời gian timeout của session trong CSDL. Nếu thời gian từ khi sự kiện click gần nhất tới bi h lớn hơn thời gian timeout quy định thì bạn hủy session đó đi.
Thân
huncaicoi viết 20:29 ngày 09/10/2018
hi,
bạn nói rõ hơn về cách sử dụng timeout của session trong CSLD đi. Hay chỉ sách cũng được. Mình mới học php và cũng có coi sơ qua database của forum phpBB thì thấy table user của nó có field là "active", chứa kiểu true/false, nên mình nghĩ là hình như nó dùng cái này để xét xem user nào đang online , hông biết vậy có đúng hông nữa.

Vậy chứ khi mình close browser thì session vẫn chưa mất hay sao hả bạn, nếu bạn nói có cái timeout, ban đầu mình cứ nghĩ là nó mất liền chứ.

Còn cái này nữa là mình chỉ muốn mỗi máy chỉ đăng nhập một lần, nghĩa là khi mình đã đăng nhập thì nếu mình mở nhiều browser khác lên thì nó tự động đăng nhập với tên đã đăng nhập mà chưa logout. Giống như ddth này mà hông cần phải xài cookies. điều đó có được hông bạn.

Cám ơn bạn đã giúp.
NumPad0 viết 20:21 ngày 09/10/2018
ví dụ, bạn quy định timeout của một session là 1h = 60*60 (s) kể từ sự kiện click chuột gần nhất của user.
Vì vậy, mỗi khi page được load, bạn có một hàm lưu lại thời gian hiện thời
PHP Code:
time() 
vào CSDL. Lần load page sau, bạn kiểm tra nếu time() - time trong CSLD > 3600s thì session của user đó bị hủy.
goodman180 viết 20:20 ngày 09/10/2018
nếu time - time_CSDL < 3600 thì gán time_CSDL = time
huncaicoi viết 20:32 ngày 09/10/2018
ủa nếu vậy thì giả sử là mình set là 1 tiếng đi thì khi người ta tắt đột xuất thì đến 1 tiếng sau mới biết hay sao, còn nếu mình set thời gian ngắn thôi thỉ lỡ người ta coi trang đó lâu quá hay giữa chừng để máy rồi bỏ đi cũng bị logout à ???

hình như cách này hông ổn cho lắm, mình tính làm là có một trang hiển thị danh sách đang online và khi nào user click vô thì nó sẽ tự động dò tìm tất cả các session đang còn tồn tại thì báo là còn online, mình nghĩ đến khả năng là dò tìm các ip đang kết nối tới server, kết nối đứt nghĩa là logout. Vậy đó, nhưng vẫn chưa biết làm cách nào, mới chuyển sang php mấy ngày.

Lúc trước làm cái chat bằng Java Applet thì bắt được sự kiện user close browser đột xuất. Nhưng bên php hông biết có hàm nào hông vậy?

thân.
jcisio viết 20:18 ngày 09/10/2018
Cái field active trong bảng user của phpBB2 không phải chỉ user online hay không, mà chỉ user đó được active (bằng mail) hay chưa.
Còn muốn bắt sự kiện unload, thì có thể móc vào sự kiện unload của body. Thí dụ: <body onunload="show_logout_page()">. Bạn có thấy nhiều trang, khi mà thoát khỏi trang đó thì nó nhảy ra quảng cáo không Nhưng mà cần chú ý trường hợp user thoát chuyển từ trang này sang trang khác, cũng như trường hợp user mở nhiều cửa sổ cùng lúc (bạn tự suy nghĩ nha).

Edit: đọc lại thấy viết nhầm, vừa sửa unload= thành onunload=.
jcisio viết 20:18 ngày 09/10/2018
Ngoài ra bạn để ý cái là http không phải là kết nối thường trực. Khi gửi một yêu cầu, thì máy chủ trả về trang web xong là ngắt kết nối luôn, chứ không chờ user đọc xong trang đó đâu
goodman180 viết 20:20 ngày 09/10/2018
bạn làm một functione sử lý sự kiện logout và tắt đột ngột, mỗi khi logout hay tắt đột ngột thì xóa tên user và giảm useronline đi một
huncaicoi viết 20:25 ngày 09/10/2018
rồi Ok, mình sẽ kết hợp 2 cách thử xem, các bạn chỉ mình sách để nghiên cứu cái timeout của session trong CSDL đi, mấy cuốn ebook Php của mình hình như hông có đề cập.

Cám ơn nhiều.
Bài liên quan
0