2010-06-10 99 views
0

我想在加載頁面時在用戶的瀏覽器中存儲cookie。然後,使用AJAX,統計具有該cookie的用戶數量,並每隔1秒左右將其發送到數據庫行。這是如何完成的?PHP會話管理,用Cookie計數用戶

+0

你的問題有點不清楚。你想保持在任何特定時間有多少用戶會話處於活動狀態? – timdev 2010-06-10 22:37:50

+0

用例/例子會很有幫助。這個問題現在並沒有意義。 – user358390 2010-06-10 22:38:31

+0

AJAX聊天,計算當前在一個房間裏的用戶。是的,活動會話。 – Nik 2010-06-10 22:40:56

回答

2

由於這聽起來像是你正在實現一個聊天室,所以假設有一些AJAXy輪詢正在進行(客戶端正在非常頻繁地檢查更新)是安全的。

一種方法可能是將active_sessions表保存在數據庫中。這可能是這樣的:

create table active_sessions (
    sess_id varchar(32) primary key, 
    lastseen timestamp 
); 

每當客戶端請求的更新,插入/更新行對他們的會話ID,然後定期用更久的時間戳刪除任何記錄的是T(對於T的一些價值比如30秒或者其他東西)

對錶中的行進行計數,以便很好地估計有多少客戶端仍處於活動狀態。

+0

當然,如果你有memcache或APC或類似的東西,你最好將活動會話列表保存在某個內存緩存中,這樣每次客戶端請求更新時都不會對數據庫運行更新。 – timdev 2010-06-10 22:52:39

+0

用戶計數器將被實現到AJAX腳本中以實時更新,因此計數器始終是準確的。當前計數器在加入時添加一個條目,並在退出時刪除它(但只有在它們單擊按鈕時纔會刪除)。是否有一種方法可以完全重寫系統,以便檢測使用Cookie的用戶數量,或者在沒有實際點擊按鈕的情況下刷新計數器(會話數據庫)的方式(如果這是有意義的)。 – Nik 2010-06-10 22:57:58

+0

另外,關於你的帖子,我們如何更新時間戳以防止AFK用戶仍然在房間中被計數。 – Nik 2010-06-10 22:59:53

0

看看我的其中一個帖子!

set session in database in php

正當的存儲數據的時間戳添加到MySQL和計數中的唯一行,其中時間>時間()= 30;延遲30秒。

+0

你如何考慮離開聊天室的用戶。我有這個問題的解決方案,但它不能解決用戶離開,除非他們實際上點擊按鈕離開,而大多數用戶則不會。編輯:我看着你的文章,它並沒有解決我在這裏試圖解決的問題。 – Nik 2010-06-10 22:44:36