PHP中Post的冷却

PHP中Post的冷却,php,post,input,Php,Post,Input,我有一个非常基本的PHP聊天系统。post唯一要做的就是在log.html中添加一行$user和$message 但是用户可以多次按住enter或按enter来发送垃圾邮件。这就造成了网站的滞后 我想做一个0.3秒的冷却系统如果处于冷却状态,请不要让用户在0.3秒内发布或禁用输入。 我怎么做这个 这里是我的代码: index.php包含两个内容。“log.html”和这些代码 <form name="message" action=""> <div c

我有一个非常基本的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>

发送
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);
}
?>

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


如果消息为空或仅包含空格或禁用字符,则更好的方法是不执行任何操作。

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

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


通读了你发布的代码后,做其他人建议的事情是值得的——检查内容是否为空,不要发布。然而,这仍然不能阻止用户用一封信回复垃圾邮件。如果你想阻止用户快速输入消息并发布它们,我相信超时会起到最好的作用。如果您只想阻止用户按下enter键,那么检查空消息可能会更好。最好的解决方案(在我看来)是使用这两种技术,因为它可以阻止用户快速发送垃圾邮件,也可以阻止用户只输入空白消息。

当用户输入消息并收到消息时,只需向会话变量添加时间戳即可。当用户再次发送消息时,使用当前时间戳检查会话中的时间戳。

更改此选项

$text = $_POST['text'];
对此

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

这样,如果用户没有发布任何内容,则不会发生任何事情。

好的,谢谢。我试试看。顺便说一句,我添加了我的代码。根据个人经验,大多数用户在5秒钟内不会注意到任何东西,因为他们无法输入其他消息。由于Eren只想暂停不到一秒钟,大多数用户不会注意到(你能在1秒内键入一些内容并按enter键吗?)你认为OK+enter怎么样而且,大多数聊天者(包括我自己)如果忘了什么,会很快再次开始打字。以任何方式阻碍用户从来都不是一个好主意。我也经常在忘记一些东西后打字。但是我不认为用户想要禁止人们打字,而仅仅是提交他们所键入的内容。这是一个非常好的主意。关于垃圾邮件:如果这是一个聊天系统,那么发送的每封邮件都需要身份验证,因此垃圾邮件不太可能发生(除非它是一个完全开放的系统),因为他说这是一个基本系统,我怀疑它会发生:)
$text = $_POST['text'] || exit();