簡體   English   中英

查找活動會話的總數

[英]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表:

  • 如果數據庫中已存在會話,則更新last_seen
  • 為沒有的新訪問者添加新行
  • 如果用戶登錄或注銷,請更改user_id值
  • 刪除過期的會話

此時,您可以使用簡單的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM