[英]Finding total number of active sessions
我是PHP的初學者,我正在為我的網站編寫一些代碼。 我想獲得當時活躍的會話總數。 我知道這是一項艱巨的任務,但可能。 我該怎么做?
我用谷歌搜索過,有人說可以通過計算臨時目錄中臨時會話文件的總數來實現。 但是,它在哪里?
有關更多解釋,請考慮Joomla后端示例,其中顯示了當前訪問者和管理員的總數,如下所示:
我正在改進@ user2067005的答案。 你實際上需要從計數中扣除2,因為scandir
報告.
和..
條目。
$number_of_users = count(scandir(ini_get("session.save_path"))) - 2;
所有允許您顯示訪問者數量的網站都使用數據庫會話處理程序(可能是mysql db甚至是memcached)。
會話表結構:
CREATE TABLE `sessions` (
`id` INT NOT NULL ,
`session_id` VARCHAR( 32 ) NOT NULL ,
`user_id` INT NOT NULL ,
`last_seen` DATETIME NOT NULL
) ENGINE = InnoDB;
會話ID可以是內置的php 會話ID,也可以是您自己的唯一哈希。 內置會話的工作速度不是很快,但您不需要注意生成會話ID,到期日期等。
用戶ID將是當前登錄的用戶ID,如果他是訪客,則為NULL。
每次用戶刷新頁面時,您都應該更新session
表:
此時,您可以使用簡單的SQL查詢來獲取所有訪問者的數量:
SELECT
COUNT(`user_id`) AS users,
(COUNT(*) - COUNT(`user_id`)) as guests
FROM
`sessions`
WHERE
`last_seen` >= DATE_SUB(NOW(), INTERVAL 15 MINUTE)
這將計算一次打開的會話數量。
$number_of_users = count(scandir(ini_get("session.save_path")));
如果添加/擁有一個用於統計分析的mysql表,該表至少包含ip地址和時間列,即使您的站點沒有成員資格活動,也會通過訪問者點擊來填充表。
在每個頁面中,將ip和time插入此表。
然后你可以獲取最多15分鍾前點擊的不同IP地址。 持續時間與您的內容嚴格相關,甚至可能是10秒或1小時。 問問自己,如果你是你的訪客,你會在你的網站上沖浪多少,當然要誠實:)
最后,你的桌子會在一段時間后變胖。 確定刪除無用行的頻率,邏輯和方法。 每次到達您的頻率時清潔桌子,這取決於您的網站流量和來源。
是的,我們可以掃描所有會話文件的temp/
文件夾或會話存儲文件夾session.save_path
,但即使在會話銷毀session_destroy()
會話存儲文件夾包含已注銷用戶的會話文件之后,它也總是無法確保正確的結果。 在這種情況下,你會得到錯誤的結果。 而且,如果你啟動phpmyadmin(MySQL)
它將創建一個自己的會話文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.