2009-12-18 143 views
0

我有一个图像网站,用户可以投票图像。第一页随机生成图像!一旦他们投票,他们将使用window.location重定向到图像详细信息页面。如果他们点击回来,他们会从浏览器缓存中看到相同的图像...并且他们可以无限次地投票...如何删除浏览器缓存?

如何删除缓存?当我点击返回按钮时,我想要刷新第一页!我已经使用:

<meta http-equiv="Pragma" content="no-cache"> 
    <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 
    <META HTTP-EQUIV="Expires" CONTENT="-1"> 

<input type="hidden" id="refreshed" value="no"> 
<script type="text/javascript"> 
    onload=function(){ 
     var e=document.getElementById("refreshed"); 
     if(e.value=="no")e.value="yes"; 
     else{e.value="no";location.reload();} 
     } 
</script> 

谢谢!!!!!

回答

7

您不想使用客户端检查来防止用户投票多次。这太愚蠢了。

你想在服务器上检查用户是否已经对该图像进行投票,如果是,请将它们指向某些“你已经投票支持该页面的哎呀”并且不计票。

+0

投票没有添加到数据库中,但我希望用户点击后可以获取新图片!当然,他们不能投多次.... 我不使用任何形式,我使用JavaScript和AJAX的投票.. – FinalDestiny 2009-12-18 20:48:30

+0

@FinalDestiny我不认为你得到的重点。 – 2009-12-18 20:49:15

+0

即使您停止缓存,人们也可以通过在新标签中打开链接找到方法。您可以在图像页面上放置“给我新图像”链接,以便他们查看新图像。 – sakabako 2009-12-18 21:24:45

0

使用location.replace("URL_HERE");而不是location.href = "URL_HERE";将阻止重定向在用户的历史记录中创建新条目。但我仍然认为阿农的回答是绝对正确的。

0

那么如果“黑客”已禁用JS呢?

我会建议你做一些其他的东西:24小时

  • 给予注册

    • 限制图像的一个可以投票选出每24小时
    • 量保持在数据库中的所有选票用户更高的最大票数限制
  • 0

    您需要动态地将图像提供给用户,而不是指向目录中的文件。所以你有一个

    image.php?id=1234 
    

    里面image.php你几乎只是打开图像,uudecode它,并打印到浏览器。由于图像是以编程方式检索的,因此您可以简单地将其阻挡或在其上强制新图像。如果您不希望用户检索特定图像并希望始终提供随机图像,则不要在网址中使用任何ID,只需提供随机图像文件即可。

    它也有助于坚持在URL中无用的随机数据,在这种情况下生成一个UUID将是一个好主意。即使你走这么一个解决方案,只是不会再像做

    print '<img src="'. $image .'?'. uniqid() .'">'; 
    

    这已经不是什么灵丹妙药,但它的另一个伎俩,以防止图像缓存。