查找开放会话数

St.*_*son 3 php session

我正在寻找一种简单(无数据库)方法来列出网站上有多少用户活跃.我能想到的最简单的方法是计算开放会话的数量.

这段代码应该有效:

$number_of_users = count(scandir(ini_get("session.save_path")));
Run Code Online (Sandbox Code Playgroud)

当然它不会因为该目录的安全限制(因为应该有!!).有没有人知道另一种方法来访问此号码而不更改目录权限.

注意: 我正在寻找一个不涉及数据库或降低PHP会话安全性的选项.

结束注意:对于任何人来到这个问题,我最终使用了一个cronjob(每分钟运行一次)从root做了类似的事情:

ls /var/lib/php5/ | wc -l > /var/www/sessioncount
Run Code Online (Sandbox Code Playgroud)

确保/var/www/sessioncountapache用户可以读取该文件.然后你可以用PHP读取文件:

$number_of_users = file_get_contents("/var/www/sessioncount");
Run Code Online (Sandbox Code Playgroud)

tom*_*tom 5

<?
// you must set your own accessible session path atop every page.
session_save_path("/home/some/other/location/"); # SECURITY VIOLATION!!!
session_start();

function session_count() {
  $filter = "sess_";
  $files = scandir(session_save_path());
  $count = 0;
  foreach ($files as $file) {
    if(strpos($file,$filter)===0) {
      $count += 1;
    }
  }
  return $count;
}

echo session_count();
?>
Run Code Online (Sandbox Code Playgroud)

  • mmm为什么这是一个安全的问题?(或者你的意思是在webroot中) (2认同)