One way to stop this would be to remember if this visitor has seen this page in the last x minutes. You can tackle that in multiple ways:
- Use a cookie
- Save visitor IP
- Use sessions
Personally, I find using sessions just for counting pages is a bit silly.
Cookies can be a good solution, and you can set an expiration time if you want to re-count the same user after some time (even if that is a page refresh). But perhaps you don’t want to inflict cookies on your visitors for this (also, there are European regulations on cookies).
Saving the IP address is not fool-proof (visitors can use proxy servers or dynamic IP addresses assigned by their ISP), but it is still a good solution for a simple counter. Since you already have a function to count your users, you could simply add their IP address while you’re at it.
If you want this IP logging to expire after a certain time, like cookies can, you will also need to add a time stamp of when you added this IP address. You could then do two things:
- Your counter script could check the timestamps in the log and ignore the entries which are older than x minutes.
- You could set up a
cronjob
for a separate script which deletes entries from the log which are older than x minutes.
The latter is preferable if your log grows quickly.