Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将对php文件的访问限制为每天一次?(具体来说,php文件发送一封电子邮件,我希望每个用户/IP每天发送一封电子邮件)_Php - Fatal编程技术网

如何将对php文件的访问限制为每天一次?(具体来说,php文件发送一封电子邮件,我希望每个用户/IP每天发送一封电子邮件)

如何将对php文件的访问限制为每天一次?(具体来说,php文件发送一封电子邮件,我希望每个用户/IP每天发送一封电子邮件),php,Php,我四处搜索过,但我对PHP不是很有经验。我现在的剧本是 <?php $to = "my email address"; $subject = "Report for broken link"; $id= $_GET['id']; $body = "Link ID: $id"; if (mail($to, $subject, $body)) { echo("<p>Message sent!</p>"); } else { echo("<

我四处搜索过,但我对PHP不是很有经验。我现在的剧本是

<?php
 $to = "my email address";
 $subject = "Report for broken link";
 $id= $_GET['id'];
 $body = "Link ID: $id";
 if (mail($to, $subject, $body)) {
    echo("<p>Message sent!</p>");
  } else {
   echo("<p>Message delivery failed...</p>");
  }
 ?>

因此,基本上是网站用户报告断开的链接,但我认为这很容易被利用,因为每次我刷新.php页面时都会发送一封电子邮件

在问题标题中,我正在寻找一种方法,将.php文件的使用限制为每个用户每天(或每x小时)使用一次。最简单的方法是什么

编辑:或者,如果你有更好的解决方案,请让我知道

解决后编辑:

对于那些对此解决方案感兴趣的人,我使用了以下方法(似乎有效,但如果有人能看到其中任何明显的漏洞,请发邮件给她):



您可以尝试的一件事是在发送电子邮件后在用户会话或浏览器cookie中存储时间戳,然后再次调用脚本时,您可以检查时间戳是否存在,如果存在,是否高于您的电子邮件阈值(一天、x小时等)

您可以尝试的一件事是,在发送电子邮件后,在用户会话或浏览器cookie中存储时间戳,然后再次调用脚本时,您可以检查时间戳是否存在,如果存在,是否高于您的电子邮件阈值(一天、x小时等)

我认为最好的办法是创建一个数据库表,用于跟踪特定用户id是否访问了该页面。一旦他们这样做了,就在表中写一行日期和用户id。在每次页面加载时,检查表中是否有一行用户id和当前日期,如果有,就不要发送电子邮件。

我认为最好的办法是创建一个数据库表,跟踪特定用户id是否访问了页面。一旦他们这样做了,就在表中写一行日期和用户id。在每次页面加载时,检查表中是否有一行用户id和当前日期,如果有,就不要发送电子邮件。

一个建议:使用POST请求而不是GET请求。这将挫败一些潜在的浏览器URL操纵器。谢谢!我现在已经从GET切换到POST。事实上,从GET切换到POST并不起作用。它停止发布“id”的值(由php查询字符串完成-即?id=一个建议:使用POST请求而不是GET请求。这将挫败一些可能的浏览器URL操纵器。谢谢!我现在已经从GET切换到POST。事实上,从GET切换到POST不起作用。它停止发布“id”的值(由php查询字符串-ie.?id=Thank完成,这看起来是我最好的选择。我将尝试使用setcookie(“noaccess”,“2hours”,time()+7200);在发送电子邮件之后,在发送电子邮件之前输入某种if语句。我想这就是你的意思吗?是的,我正在考虑类似的内容。谢谢,这看起来是我的最佳选择。我将尝试使用setcookie(“noaccess”,“2hours”,time()+7200);在发送电子邮件之后,在发送电子邮件之前加入某种if语句。我想这就是你的意思?是的,我在想类似的事情。
<?php
 $to = "my email address";
 $subject = "Report for broken link";
 $id= $_GET['id'];
 $body = "Link ID: $id";
 if(isset($_COOKIE['noaccess'])) {
 echo ("<p>Message already sent!</p>");
  } else {
     if (mail($to, $subject, $body)) {
       setcookie("noaccess", "2hrs", time()+7200);
       echo("<p>Message sent!</p>");
      } else {
       echo("<p>Message delivery failed...</p>");
      } }
 ?>