[WEB][PHP] 關於網站線上人數統計的實做

[WEB][PHP] 關於網站線上人數統計的實做

如果網頁是使用 PHP 來寫的話,可以很容易做到基本的網站人數統計功能。

1. 去改寫 session 的處理方式,例如以下是將原本存到 file 的 session 資料變成存到 MySql 之類的 (memory) database. (註一):

去用 session_set_save_handler() 函式改寫 session 在

  • open(),
  • close(),
  • read(),
  • write(),
  • destroy(),
  • Gc()

時的處理方式。

其中:

  • read() 時去更新目前的 timestamp 值
  • Gc() 時去檢查該 session 是否已經超過時間了 (所以要記錄每個 session 上一次動作的 timestamp, 並於 read() 時去更新),超過者即刪除之
  • 現存數量即為目前連線數, 可以用 MySQL 的「SELECT COUNT(*) FROM table_name」取得目前連線數。

(有些細節請到網路上找相關資料)

2. 讓連到網站的連線被紀錄 session:
也就是在 xxx.php 中執行「session_start();」。

3. 預設的連線保留時間是設定在 php.ini 的 「session.gc_maxlifetime」欄位,又其預設值是 1440 秒,也就是說一個 session 超過約 24 分鐘沒有動作的話,”可能” 會被移除 (這裡講的是 “可能”,因為垃圾收集機制不是每一次都會作用的,網站越熱門的,其狀態越正確。See Also: session.gc_probability, session.gc_divisor)。

經由上述變化處理,就可以很容易達成類似 BBS 的連線統計功能,可以有: 來源 IP, 連線數, idle 時間, … 等 ,結果呈現可以參考以下 URL:

http://career.zhupiter.com/account/usrlst.php

註一: 不想搞變化的話直接去存 session file 的目錄
和子目錄中, 數數看有幾個檔案即可知道有幾條現存的連線

關鍵字: PHP, session_set_save_handler(), Database session, MySQL, 實做, 線上人數統計, file session

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.