Re: Page load frequency
- From: Erwin Moller <since_humans_read_this_I_am_spammed_too_much@xxxxxxxxxxxxxxxx>
- Date: Thu, 14 Dec 2006 13:20:36 +0100
frizzle wrote:
frizzle wrote:
Erwin Moller wrote:
frizzle wrote:
Hi there,
I need a function to prevent a page from being loaded too often too
fast.
So say, one is only allowed to refresh a single page 5 times in 10
seconds, or 10 times in 5 seconds (or whatever ... ).
If the load frequency exceeds that, the site calls exit(); And a
message is displayed. Just like Expression Engine does ...
This way i want to protect the DB from being queried rediculously
often, and maybe even protect it from DDOS attacks.
I hope it's clear. I don't know where to start ..
Thanks!
Hi,
You have to implement some kind of countingmechanism when the page
starts. You can store the timestamp (now) in a database once the page
runs, and check if it has been accessed more than X times last Y
seconds. Just build it. :-)
Of course this check will slow down each request to the page a little,
but if the load of running the whole page is much higher, this may be
worth the time.
Regards,
Erwin Moller
Would this be a good thing to do with sessions ?
Not to be stupid here, but i don't completely get one thing:
Say one can load 5 times in 5 seconds;
If someone loads the page at second 1, and then reloads three times
between second 3 and five, this would be 4 loads in 5 seconds. But if
then he reloads 3 times between seconds 5 and 7, it's 6 loads in (less
then) 5 seconds, though AFAIK your idea would have "approved" this.
How could i fix this?
Thanks!
Hi,
first question: Session.
I was unsure if you wanted to protect against a single user or against all
users.
If you want to protect against a single user loading the page too much, you
should use session, BUT if that visitor wants to circumvent your
sessionlogic, it is easy.
Here is why: If you want to use a session with a visitor you send along a
sessionid with each request and response. The sessionid is stored in the
URL or cookie.
Both can easily be manipulated by the visitor, so this will not really work.
It would make more sense to use the remote IP-address to maximize the number
of requests to your page.
Second querstion: How to implement the quota X times per Y secs?
just a rouch idea based on IP:
create a table like this:
CREATE TABLE tblrequest(
IPnum text,
lastrequest datetime
)
Now above your script do this:
1) Get the remote IP
Use remoteadress, read more here:
http://nl3.php.net/manual/en/function.getenv.php
2) delete from tblrequest ALL requests older than (now - Y secs)
3) check if this IP has already exceeded the quota:
Something like:
SELECT COUNT(IPnum) FROM tblrequest
WHERE (IPnum = '<IPnum found in step1>');
if the count exceeds X, exit, otherwise continue with the rest of the
script.
Hope this helps.
Regards,
Erwin Moller
.
- Follow-Ups:
- Re: Page load frequency
- From: Erwin Moller
- Re: Page load frequency
- References:
- Page load frequency
- From: frizzle
- Re: Page load frequency
- From: Erwin Moller
- Re: Page load frequency
- From: frizzle
- Re: Page load frequency
- From: frizzle
- Page load frequency
- Prev by Date: Re: Wnat to embed full HTML page in email, but migrating style from css files to element style attributes
- Next by Date: Best practices for bundling PHP runtime libs?
- Previous by thread: Re: Page load frequency
- Next by thread: Re: Page load frequency
- Index(es):
Relevant Pages
|