【问题标题】:Cooldown on Post in PHPPHP 中 Post 的冷却时间
【发布时间】:2015-09-03 13:17:48
【问题描述】:

我有一个非常基本的 PHP 聊天系统。 post 唯一要做的就是在 log.html 中添加一行 $user 和 $message。

但用户可以通过按住 enter 或多次按 enter 来发送垃圾邮件。这会导致网站延迟。

我想制作一个大约 0.3 秒的冷却系统。 如果处于冷却状态,请不要让用户发布或禁用输入 0.3 秒。

我该怎么做?


这里是我的代码:

index.php 包含两件事。 “log.html”和这些代码

    <form name="message" action="">
        <div class="input-group dropup" id="bottom">
  <input type="usermsg" type="text" id="usermsg" maxlength="65" autocomplete="off" class="form-control" placeholder="Type your message here.">
        <span class="input-group-btn">
    <button class="btn btn-success" type="submit" name"submitmsg" id="submitmsg">Send</button>
  </span>
</div>
</form>

而post.php包含这些代码

<?
session_start();
if(isset($_SESSION['name'])){

$text = $_POST['text'];

$sp = fopen("player_log.html", 'a');
fwrite($sp, "<div class='msgln'>[" .date("Y-m-d"). "-".date("g:i A"). " | " .$_SERVER['REMOTE_ADDR']."] <b>".$_SESSION['name']."</b>: ".stripslashes(htmlspecialchars($text))."<br></div>");
fclose($sp);

// SOME str_replace CODES FOR EMOTICONS, BANNED TEXTS ETC..

$fp = fopen("log.html", 'a');
fwrite($fp, "<div class='msgln' style='color: #BDBDBD;'><b style='color: #FFBF00;'>[Player]&nbsp;".$_SESSION['name'].":</b> ".$finaltext."<br></div>");
fclose($fp);
}
?>

【问题讨论】:

    标签: php post input


    【解决方案1】:

    您可以尝试在 JavaScript 中使用 setTimeout() 函数。按下回车后,禁止用户输入另一条消息(我无法评论如何执行此操作,因为您没有发布任何代码)。然后使用 setTimeout() 函数在 x 秒后启用输入(下图显示 3 秒后的警报):

    setTimeout(function(){ 
        alert("Hello"); 
    }, 3000);
    

    如果您需要更多帮助,请扩展您的问题并向我们展示一些代码。

    阅读完您发布的代码后,可能值得按照其他人的建议去做 - 检查内容是否为空,不要发布。但是,这仍然不会阻止用户通过一封信回复发送垃圾邮件。如果您希望用户快速输入消息并发布它们,我相信超时会最有效。如果您只想阻止用户按下回车键,检查空消息可能会更好。最好的解决方案(在我看来)是同时使用这两种技术,因为它可以阻止用户快速发送垃圾邮件并阻止用户只输入空白消息。

    【讨论】:

    • 好的,谢谢。我会尝试。顺便说一句,我添加了我的代码。
    【解决方案2】:

    禁用输入不是一个好的解决方案。它会破坏用户体验,用户会因此而讨厌你。

    如果消息为空或仅包含空格或禁止字符,则更好的方法是什么都不做。

    【讨论】:

    • 从个人经验来看,大多数用户在无法输入另一条消息的暂停 5 秒内不会注意到任何内容。由于 Eren 只想暂停不到一秒,因此大多数用户不会注意到(你能在 1 秒内输入一些内容并按 Enter 吗?)
    • 您如何看待 OK + Enter? :) 此外,如果忘记了什么,大多数聊天者(包括我自己)会再次快速打字。以任何方式阻碍用户都不是一个好主意。
    • 我也经常在忘记某些东西后打字。但我不认为用户想禁止人们输入,而只是禁止提交他们输入的内容。
    • 这是一个非常好的主意。关于垃圾邮件:如果这是一个聊天系统,它需要对发送的每条消息进行身份验证,所以垃圾邮件不太可能发生(除非它是一个完全开放的系统)
    • 正如他所说的这是一个基本系统,我怀疑它确实如此:)
    【解决方案3】:

    当您的用户输入消息并收到消息时,只需将时间戳添加到会话变量即可。当用户再次发送消息时,检查会话中的时间戳,与当前时间戳。 http://php.net/manual/de/datetime.gettimestamp.php

    【讨论】:

      【解决方案4】:

      改变这个

      $text = $_POST['text'];
      

      到这里

      $text = $_POST['text'] || exit(); 
      

      这样,如果用户什么都不发,什么都不会发生。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-15
        • 2021-05-02
        • 2021-03-11
        • 2019-06-21
        • 2021-02-16
        • 2021-06-17
        • 2021-12-04
        相关资源
        最近更新 更多