我有一个非常基本的PHP聊天系统。唯一的事情是添加一行$ user和$ message到log.html。
但是,用户可以通过多次按输入或按输入来发送垃圾邮件。这导致网站滞后。
我想制作一个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] ".$_SESSION['name'].":</b> ".$finaltext."<br></div>");
fclose($fp);
}
?>
答案 0 :(得分:2)
您可以尝试在JavaScript中使用setTimeout()函数。按Enter键时,禁止用户输入另一条消息(我无法评论如何执行此操作,因为您没有发布任何代码)。然后使用setTimeout()函数在x秒后启用输入(下面显示3秒后的警报):
setTimeout(function(){
alert("Hello");
}, 3000);
如果您需要更多帮助,请展开您的问题并向我们展示一些代码。
阅读了您发布的代码后,可能值得做其他人建议的内容 - 检查内容是否为空且不发布。但是,这仍然不会阻止用户发送一封信回复垃圾邮件。如果您希望用户快速输入消息并发布消息,我相信超时会最有效。如果您只想阻止用户按住Enter,那么检查空消息可能会更好。最好的解决方案(在我看来)是使用这两种技术,因为它会阻止用户快速发送垃圾邮件并阻止用户输入空白邮件。
答案 1 :(得分:0)
禁用输入不是一个好的解决方案。它会破坏用户体验,用户也会因此而讨厌你。
如果邮件为空或仅包含空格或禁止的字符,更好的方法是不执行任何操作。
答案 2 :(得分:0)
当您的用户输入消息并收到消息时,只需在会话变量中添加时间戳即可。当用户再次发送消息时,请使用当前时间戳检查会话中的时间戳。 http://php.net/manual/de/datetime.gettimestamp.php
答案 3 :(得分:0)
更改此
$text = $_POST['text'];
到此
$text = $_POST['text'] || exit();
这样,如果用户没有发布任何内容,则不会发生任何事情。