anon445699
anon445699

Reputation:

PHP - Visitors Online Counter

I have the following code to count visitors on my PHP site. It works fine on my local development machine using WampServer but when I uploaded my files to my hosting account for testing I realized that it does not work properly.

I get really high number count and also noticed the session are never deleted so they just keep accumulating.

It is a simple session counter. Is there a better way of doing it? Could some one please show me or point me to some article? Thank you!

<?php
//------------------------------------------------------------
// VISITORS ONLINE COUNTER
//------------------------------------------------------------
if (!isset($_SESSION)) {
  session_start();
}
function visitorsOnline()
{
    $session_path = session_save_path();
    $visitors = 0;
    $handle = opendir($session_path);

    while(( $file = readdir($handle) ) != false)
    {
        if($file != "." && $file != "..")
        {
            if(preg_match('/^sess/', $file))
            {
                $visitors++;
            }
        }
    }

    return $visitors;
}
?>

Upvotes: 0

Views: 9011

Answers (5)

Starx
Starx

Reputation: 79069

If you want your own internal counting system then I would suggest, storing such information related to website in database. And update the record everytime a user browses the website.

Upvotes: 2

Dan Grossman
Dan Grossman

Reputation: 52372

If this is shared hosting, you're counting everyone's session files, not just your own. That's why the number is huge and largely unrelated to how many people are on your site.

Upvotes: 4

mos fetish
mos fetish

Reputation: 506

Hmm, I'm not sure that reading the session files in the session dir is the best method.

Why not have a write on a db table for every page load. Then have a read that counts the number of unique users in the last x minutes?

It sounds db intensive but unless your site is ultra-busy, I can't see a problem.

Upvotes: 0

cdhowie
cdhowie

Reputation: 169478

If the problem on the production server is that sessions are simply never deleted, you have two options:

  • Lower the session expiry time on your PHP installation.
  • Examine the last-modified date of the session files and only count them towards your total if they were modified within a certain amount of time from now.

Upvotes: 1

Josiah Kiehl
Josiah Kiehl

Reputation: 3633

The best (free) way to count visitors is here: http://www.google.com/analytics.

If you want more realtime data, (for instance, currently active users) try: http://www.woopra.com/

If you're set on maintaining who is active on your site with your own code, I'd do so with a "last action" date field in your database on the users table. You will be able to do a PHP equivalent query to SELECT COUNT(id) FROM Users WHERE #{Time.now} > #{15.minutes.ago}

If you want to track anonymous users as well, rather than using the Users table, make a table with the visitor's IP as the identifying field and use the same technique mentioned above.

Upvotes: 3

Related Questions