我创建了一个用户可以上传图片的网站,我想记录单个图片的总观看次数。
现在我对实施的看法是:
将访客的ipaddress存储在会话中,fe:
$key = "view_img_".$img->id;
if(!isset($_SESSION[$key]))
{
$_SESSION[$key] = array();
}
$visitorIpAddress = $_SERVER['REMOTE_ADDRESS'];
$found = false;
foreach($ip in $_SESSION[$key])
{
if($ip == $visitorIpAdress)
{
$found = true; //visitor has visited before in the livespan of this session
break;
}
}
if(!$found)
{
//do sql update query for the number of views for this image
$sql = mysql_query("UPDATE ") //etc.
//Add this ip to the list in the session
$_SESSION[$key][] = $visitorIpAdress;
}
现在我的问题是:
我希望在一定时间限制之后清除$ _SESSION [$ key]变量中访问者的ipaddress以清除资源。
事情是:
大多数访问者可能只查看一次图像,当某个图像变老时,可能不再访问该图像,但会话仍然存在。
有没有办法为特定的$ _SESSION变量定义生命周期,以便自行重置? (等于$ _SESSION [$ key] = null)
或者有更好的方法来实现这个吗?
答案 0 :(得分:1)
您通过会话方法计算的是唯一视图的数量。如果您只想计算观看次数,请不要放太多大脑,只需运行如下查询:
UPDATE counttable SET Views = Views + 1 Where ImageID = 123
填充ImageID,你很高兴。 KISS。
答案 1 :(得分:0)
似乎,你不太清楚PHP会话是如何工作的:
因此,如果您愿意在会话中存储多少个视图,那么您将只在此特定时刻存储当前用户的视图。如果要存储总访问次数,则需要使用数据库或其他外部数据存储。例如,包含图片的表格可能包含views
列,您可以在每次访问后将其递增:
UPDATE images SET views = views + 1 WHERE id = 123