【问题标题】:wordpress unique Voting using a cookie system to prevent revoting for each postwordpress 独特的投票使用 cookie 系统来防止对每个帖子进行重新投票
【发布时间】:2013-09-13 21:16:09
【问题描述】:

我正在尝试为 wordpress 主题创建投票系统。我正在使用 cookie 系统来确保选民只投票一次,但问题是当用户投票给一个帖子时,投票的 cookie 设置为 1,如果他们想投票给另一个帖子,因为 cookie 设置为 1他们不能。我怎样才能解决这个问题并为每个 wordpress 帖子拥有唯一的投票?

我正在使用下面的代码来设置cookie

setcookie('voted','1');

我使用 if 语句来查看用户是否投票:

if(!isset($_COOKIE["voted"]){
     // vote up code
}

【问题讨论】:

  • 使用客户端 cookie 控制投票就像根本没有控制一样。您必须使用存储在服务器上的数据进行控制。

标签: php jquery cookies wordpress


【解决方案1】:

您可以尝试将 poll 的 id 存储在已投票的 cookie 中。

<?php
setcookie("voted[$id_of_poll]", $id_of_poll);

然后像这样检查它

<?php
if (in_array($id_of_poll, $_COOKIE['voted']))
{
   // already voted
}

但是请注意,cookie 是高度易变的。用户可以清除它们,他们可能会使用多个设备等。您最好将其存储在您自己的数据库中,以针对用户 ID。 p>

【讨论】:

    【解决方案2】:

    将帖子 ID 附加到 cookie 中,使其唯一:

    setcookie("voted-".get_the_ID(),'1');
    

    还有这样的:

    if(!isset($_COOKIE["voted-".get_the_ID()]){
         // vote up code
    }
    

    【讨论】:

    • 不会用 cookie 淹没 cookie 缓存吗?如果用户为 50 个帖子投票,那么浏览器历史记录中将设置 50 个 cookie。这不是问题吗?
    • 是的,因为每个站点只能拥有这么多的 cookie(实际测试中大约有 180 个)。更好的选择是在数据库中创建一个投票记录表并将投票存储到其中,这将在这里记录很多。还生成一个随机会话 ID 并将其存储在每次投票中。将用户的会话 ID 设置为 cookie。然后,您可以在该表中查找他们是否投票。
    猜你喜欢
    • 1970-01-01
    • 2013-05-27
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    相关资源
    最近更新 更多