How to construct anti-refresh plugin?

We've got situation like this:
1. I'm entering page X,
2. then I click (or hold f5) for 20 seconds

What to do to avoid reloading page? (transfer and statistics)
Limit max pages download to 20 per minute?

Any solutions?
AndyPSVAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Ray PaseurCommented:
Not sure I understand your issue, but here is how I prevent multiple submissions of form data.
// PREVENT MULTIPLE SUBMISSIONS DUE TO DOUBLE CLICKS ON SUBMIT BUTTON
// EXAMPLE USAGE: 
// if ( multi_submit() ) 
// { /* error */ } 
// else 
// { /* normal processing */ }
// ASSUMES USE OF SESSIONS
 
function multi_submit($type = "post") 
{
 
// CHOOSE AND ENCODE THE REQUEST DATA
   $string = "";
   $input_array = ($type == "get") ? $_GET : $_POST;
   foreach ($input_array as $val) { $string .= $val; }
   $string = md5($string);
 
// SAME AS THE LAST REQUEST DATA?
   if ($_SESSION['_multi_submit'] === $string) 
   {
      return TRUE;
   } else 
   {
      $_SESSION['_multi_submit'] = $string;
      return FALSE;
   }
}

Open in new window

0
profyaCommented:
This code demonstrates how to control the number user refreshes a page. You can also use the microtime to control the span of time, however, because I am using windows I couldn't test this part.

create an include file, add the code attached to, then include the file created in your page.
Replace violate.htm with the page the script will redirect visitor to, when he/she exceeds refresh limits.
I hope you find it useful.
<?php
session_start();
$currentIp=$_SERVER['REMOTE_ADDR'];
if (isset($_SESSION['visitors']))
{
	$visitorsCache=$_SESSION['visitors'];
 
	if (isset($visitorsCache[$currentIp]))
	{
		$visitorsCache[$currentIp]->numberOfRefreshes++;
		$visitorsCache[$currentIp]->lastVisit=microtime(true);
	}
	else
	{
		$visitorsCache[$currentIp]=new visitorInfo();
		$visitorsCache[$currentIp]->numberOfRefreshes++;
		$visitorsCache[$currentIp]->lastVisit=microtime(true);
	}
	$datediff=(microtime(true)- $visitorsCache[$currentIp]->lastVisit);
	if ($visitorsCache[$currentIp]->numberOfRefreshes>5)
	{
		$visitorsCache[$currentIp]->numberOfRefreshes=0;
		header("location: violate.htm");
	}
}
else
{
	$visitors=array();
	if (isset($visitors[$currentIp]))
	{
		$visitors[$currentIp]->numberOfRefreshes++;
		$visitors[$currentIp]->lastVisit=microtime(true);
	}
	else
	{
		$visitors[$currentIp]=new visitorInfo();
		$visitors[$currentIp]->numberOfRefreshes++;
		$visitors[$currentIp]->lastVisit=microtime(true);
	}
	$_SESSION['visitors']=$visitors;
}
 
class visitorInfo
{
	public $numberOfRefreshes=0;
	public $lastVisit="";
}
?>

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Ray PaseurCommented:
I guess you could also try some combination of ignore_user_abort() and sleep().  Can you please explain a little more about what you are trying to achieve?   Thanks, ~Ray
0
Newly released Acronis True Image 2019

In announcing the release of the 15th Anniversary Edition of Acronis True Image 2019, the company revealed that its artificial intelligence-based anti-ransomware technology – stopped more than 200,000 ransomware attacks on 150,000 customers last year.

AndyPSVAuthor Commented:
I just don't want to user make above 20 page refreshes in 1 minute
0
profyaCommented:
Try my solution and change lines 19 and 20 to the following:
        $datediff=(microtime(true)- $visitorsCache[$currentIp]->lastVisit)*60;
        if ($visitorsCache[$currentIp]->numberOfRefreshes>20 && $datediff<1)

Open in new window

0
profyaCommented:
Or adjust the values to suit your case, as I told you earlier, my machine uses Windows XP there for I can not test the elapsed time properly. I tested the solution as per refresh count, this represents 50% of the fix as I see.
0
AndyPSVAuthor Commented:
how to transform this code - without class?
0
profyaCommented:
The class helps you because many users will visit your website, each user with a specific ip will have its object. You can use arrays by the way to do that.
0
Ray PaseurCommented:
"I just don't want to user make above 20 page refreshes in 1 minute"

OK, I get that part.  Why not?
0
AndyPSVAuthor Commented:
thanks
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Web Development

From novice to tech pro — start learning today.