为每个用户只能提交一次的比赛创建表格

时间:2011-07-13 08:18:12

标签: php facebook

我创建了一个Facebook应用程序,一旦用户喜欢一个页面,他们就会被发送到一个显示页面,其中包含一个竞赛的参赛表格,

是否有方法可以使用户只能提交一次表单?

2 个答案:

答案 0 :(得分:1)

  

是否有方法可以使用户只能提交表单   一次?

我认为您首先需要对用户进行身份验证(Facebook会为您执行此操作吗?)。我假设你正在使用like下面的内容:

<?php 

     $app_id = "YOUR_APP_ID";

     $canvas_page = "YOUR_CANVAS_PAGE_URL";

     $auth_url = "https://www.facebook.com/dialog/oauth?client_id=" 
            . $app_id . "&redirect_uri=" . urlencode($canvas_page);

     $signed_request = $_REQUEST["signed_request"];

     list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

     $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

     if (empty($data["user_id"])) {
            echo("<script> top.location.href='" . $auth_url . "'</script>");
     } else {
            echo ("Welcome User: " . $data["user_id"]);
     } 
 ?>

然后可以授权用户($data["user_id"])是否是新用户继续。如果没有则停止。您可以通过在数据库中存储$data["user_id"]来跟踪用户。

答案 1 :(得分:0)

这是一个非常含糊的问题。

如果您真的只是想阻止他们多次提交表单(通过在提交按钮上单击多次),您可以使用一个简单的Javascript来禁用单击按钮时(或表单是提交了另一种方式,例如按下回车键/返回键。)

但是,我认为不是阻止他们多次提交表单,而是真的只想忽略除第一次提交之外的所有内容。您需要一种方法来唯一地识别该用户/机器 - 您如何做到这一点实际上取决于您可以自己提供哪些信息。

一种可能的解决方案是使用具有独特价值的cookie,持续一段时间(一天,一周,一个月或一年) - 选择您认为适合您使用的任何内容;如果竞争仅适用于一周,你不需要一个持续一年的cookie,例如)。

当他们第一次提交表单时,跟踪一个条目来自机器并且cookie包含该值,并忽略具有相同cookie值的任何后续条目。

显然这不是完全安全的 - 他们可以删除他们的cookie,或修改这个特定cookie的价值,再次进入,但很多用户不会这样做。如果他们使用多个Web浏览器,他们也可以多次输入。如果你还有别的东西