PDA

View Full Version : Kiểm tra số người đang trực tuyến ?



NgocHien
10-07-2003, 11:50
Em muốn kiểm tra xem hiện tại có bao nhiêu người đang online trên site của mình thì sao hả các anh ?

puppy
10-07-2003, 14:32
Cái này hình như có người trả lời rồi mu. Nhưng mà wen link mất tiêu rồi.

vanlang
10-07-2003, 18:19
bạn thử ý tưởng của tôi xem : bạn xem thử có bao nhiêu thành viên đã đăng nhập vào site rùi ... tính thwo xem sao .. tui chưa thử bao giờ .. vì bạnn hỏi nên mới nảy ra ý tưởng này .. ko biết có đúng không nữa

KEM_WALL
10-07-2003, 18:34
nếu xài SQL thì tìm cách xem có bao nhiêu query rùi

vanlang
10-07-2003, 18:49
bác có thể viết ra câu lệnh đó cho tui tham khảo không thế

zek3vil
10-07-2003, 22:51
Bạn code trong file global.ascx. Bạn đặt 1 biến ví dụ như Application["OnlineUsers"] rồi trong method method Session_Start bạn cho biến Application["OnlineUsers"] + 1, và trong method Session_End bạn cho Application["OnlineUsers"] - 1.

vanlang
11-07-2003, 15:11
nếu thế một người mà mở hai site cùng lúc thì thành hai người online hả

KEM_WALL
11-07-2003, 15:18
uhm, 1 người mở 1 chục site thì nó ghi 1 chục người online

vanlang
11-07-2003, 15:36
vậy thì thật là bất tiện .. mà cái cách đó tui thấy hình như giống của IBF phải không ... thế cái diễn đàn này thì người ta dùng cách nào nhỉ

KEM_WALL
11-07-2003, 15:46
tạo 1 col trong SQL, "bLogin"
nếu login rùi thì blogin = true
sau đó dùng SQL

"select count(blogin) from anytable"

zek3vil
11-07-2003, 21:07
tui ko hiểu ý bạn nói 2 site cùng lúc là sao, bởi vì khi user vào site của mình thì Session của user đó Start và chỉ 1 lần thôi, và bạn có mở cả chục trang cũng vậy, sao lại có chuyện 2,3 site là sao?

1011
12-07-2003, 11:14
Muốn kiểm tra có bao nhiêu người đang online phải dùng IP Client của máy người đó đang truy cập vào site.

Để làm được điều này, ta phải tạo trong Database một bảng có cấu trúc như sau:

+ ClientIP: khóa của bảng cũng là Client IP
+ MemID: ID của thành viên đã đăng nhập, có thể NULL nếu là guest
+ TimeOnline: thời gian bắt đầu xem mỗi trang

Có một user vào site ta sẽ kiểm tra xem có trong bảng WhoOnline chưa.
+ Nếu chưa có: Insert
+ Nếu có rồi: Update (thời gian online)
Việc kiểm tra này được thực hiện trước khi chạy mỗi trang.

Nếu sau một khoảng thời gian (tùy người lập trình định nghĩa) mà ClientIP không còn truy cập nữa thì ClientIP đó sẽ bị xóa. Hàm này sẽ được chạy khi có một ClientIP khác truy cập site.

Lấy ClientIP như sau:
Dim ClientIP As String
ClientIP = Request.ServerVariables("REMOTE_HOST")

Cuối cùng chỉ việc đếm trong bảng WhoOnline sẽ biết đươc bao nhiêu người đang online trong đó có bao nhiêu thành viên và bao nhiêu khách.

canhnb
25-09-2008, 11:29
Nếu sau một khoảng thời gian (tùy người lập trình định nghĩa) mà ClientIP không còn truy cập nữa thì ClientIP đó sẽ bị xóa. Hàm này sẽ được chạy khi có một ClientIP khác truy cập site.


Mình chưa hiểu lắm Khi có một ClientIP khác truy cập làm sao để kiểm tra được ClientIP nào không còn truy cập để xóa đi nhỉ ? Bạn nào giải thích giúp với !

samuraitruong
25-09-2008, 22:11
Dùng biến Application là được rùi.
Còn Data Structure tùy bạn thiết kế.

sonC0609k
28-09-2008, 20:49
hoàn toàn đồng ý với bạn zek3vil
Nói tóm lại không có gì phức tạp cả chỉ cần lưu lại vào biến session rồi lúc ses_ Start thì +1 còn ses_End thì -1
Không bao giờ có chuyện bạn mở 10 cửa sổ trình duyệt thì session ghi nhận lại 10 lần cả
Kể cả khi login thì vẫn phải lưu lại sự kiện log đó vào session mà
Cuối cùng thì lưu vô đâu đó (file txt chẳng hạn), rồi cứ mái thoải mà xử lý