实现图像视图数量的有效方法 - PHP

时间:2011-02-18 09:29:22

标签: php

我创建了一个用户可以上传图片的网站,我想记录单个图片的总观看次数。

现在我对实施的看法是:

将访客的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)

或者有更好的方法来实现这个吗?

2 个答案:

答案 0 :(得分:1)

您通过会话方法计算的是唯一视图的数量。如果您只想计算观看次数,请不要放太多大脑,只需运行如下查询:

UPDATE counttable SET Views = Views + 1 Where ImageID = 123

填充ImageID,你很高兴。 KISS。

答案 1 :(得分:0)

似乎,你不太清楚PHP会话是如何工作的:

  • 每个会话都是针对每个用户的
  • 就用户而言,每个会话都存在 只有在用户使用之前 网站。当浏览器关闭时, 会话cookie被删除和会话 终止。
  • 会话可能会被终止 如果PHP设置中定义的会话生存时间到期,则更早。

因此,如果您愿意在会话中存储多少个视图,那么您将只在此特定时刻存储当前用户的视图。如果要存储总访问次数,则需要使用数据库或其他外部数据存储。例如,包含图片的表格可能包含views列,您可以在每次访问后将其递增:

UPDATE images SET views = views + 1 WHERE id = 123
相关问题