点击计数器代码错误集cookie

时间:2014-07-22 13:18:01

标签: php cookies counter

我有一个带有cookie的命中计数器的PHP代码:

$id = intval($_GET['id']);
if(!isset($_COOKIE['visited'])) {
    echo "not set";
    setcookie("visited",$id,time()+3600);
    mysql_query("UPDATE movie SET movie_views = ( movie_views + 1) WHERE id = $gid ");
} 

现在的问题是,当我刷新页面时,它每次都会计入1次,并且不会等待1小时。

1 个答案:

答案 0 :(得分:0)

我认为您的要求是:

1)有人使用作为网址($ _GET)一部分传递的记录ID访问您的网站。

a)如果他们在经过一段时间后的时间间隔内访问'然后是' ID'录音。

b)如果他们之前已经访问过并且时间间隔为'尚未过期的请求记录了“id'被忽略了。

'时间间隔'被记录在名为“访问过”的COOKIE中。

您在数据库中记录详细信息 - 我将ID存储在$ _SESSION变量中。它仅供演示。

我只展示方法。它并不意味着有效率。它的设计非常容易调试。它报告每一步和状态。

我使用'时间间隔' 20秒。

我有一个工作示例: viper-7.com?id=9/ 。注意: $ _ GET [id]参数会在' viper-7'上传递。网址!您可以更改它以确保代码有效。它将拒绝你的新id,直到20秒过去。

代码(注释):

<?php
session_start(); // Testing only - store last ID in $_SESSION['id']!

define ('VOTE_DELAY', '20'); // seconds

// show 'visited cookie or  if missing...
if (isset($_COOKIE['visted'])) {
    echo '<pre>';
    var_dump($_COOKIE['visited']); // show all cookies currently active
    echo '</pre>';
}
else {
    echo '<br />No current $_COOKIE[visited] found!';
    echo '<br />';
}

// DEBUG - show current ID
echo '<br />Current Session ID: ', !empty($_SESSION['id']) ? $_SESSION['id'] : 'none';
echo '<br />';

// process whether visited in the last interval (20 seconds)
if (isset($_COOKIE['visited'])) {
    echo '<br />active Cookie: ', $_COOKIE['visited'],' - will leave now...';
    return; // no more voting until cookie expires
}

// no id provided - is error
if (empty($_GET['id'])) {
    echo '<br />no valid $_GET[id] provided : will leave - NO Visited Cookie set ';
    return; // do nothing
}

$id = $_GET['id']; // store new id in the session rather than the database

echo "<br />New VALID visit: will store cookie for: ", $id, ' in the $_SESSION[id] variable';
setcookie("visited", "$id", time() + VOTE_DELAY); // set the 'visited cookie
$_SESSION['id'] = $id; // store in session rather than the database.
//     mysql_query("UPDATE movie SET movie_views = ( movie_views + 1) WHERE id = $gid ");

echo "<br /> new cookie set...";

我不知道为什么你的代码不起作用。

此外,如果客户删除了“访问过的”&#39;然后,他们可以获得“id”#id;按照自己的意愿记录。您需要分析数据库中的记录,以确保记录&#39; id&#39;是有效的。