我有一个带有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小时。
答案 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;是有效的。