2017-08-02 60 views
-1

我想製作一個點擊時間計數器,以防止在我的網站上進行網頁瀏覽。 我的代碼:PHP點擊時間計數器

session_start(); 

$user_ip = $_SERVER['REMOTE_ADDR']; 

$_SESSION['IP'] = $user_ip; 

if(empty($_SESSION['exists'])){ 

    $_SESSION['clicks'] = 1; 
    $_SESSION['latest'] = microtime(true); 

} 

$_SESSION['exists'] = true; 
$_SESSION['last'] = $_SESSION['latest']; 
$_SESSION['latest'] = microtime(true); 

$time = $_SESSION['latest'] - $_SESSION['last']; 

if($_SESSION['clicks'] <= 3 AND $time < 1) { 
    // Too many requests... 
    header("..."); 
} 
else { 
    $_SESSION['clicks'] += 1; 
    echo "Clicks: ".$_SESSION['clicks']; 
    echo "<br>"; 
    echo "Seconds: ".$time; 
} 

此代碼將在我的網站上運行多個頁面。 但我認爲這可能被繞過很容易,編寫更多時間範圍代碼將花費巨大。 有沒有更好更簡單的方法來防止網頁瀏覽? 謝謝

+0

通過webscraping你的意思是像谷歌這樣的公司?如果很多大公司都使用「robots.txt」文件。在這裏查看更多http://www.robotstxt.org/ – DrRoach

+0

@DrRoach我的意思是防止從我的網站竊取數據。就像我說的,我在多個站點上運行該代碼。所以我不希望刮板在很短的時間內請求很多網站 – Jay

+0

請閱讀[我可以問哪些主題](http://stackoverflow.com/help/on-topic) – RiggsFolly

回答

0

將速率限制從應用程序代碼卸載到您的網絡服務器。 所有主要的網絡服務器(IIS,Apache,nginx,lighttpd等)都具有IP內置速率限制請求的功能。

Apache 2.4附帶mod_ratelimit來實現這一點。 Nginx具有內置的功能。

另一種選擇是使用像Cloudflare這樣的DDoS防護服務,或者只是在您的網絡服務器前放置一個代理軟件。