- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想防止我的脚本被淹没 - 如果用户按 F5,它每次都会执行脚本。
我想防止这种情况并允许每 2 秒执行一个脚本,有什么解决方案吗?
最佳答案
你可以使用 memcache 来做到这一点..
简单的演示脚本
$memcache = new Memcache ();
$memcache->connect ( 'localhost', 11211 );
$runtime = $memcache->get ( 'floodControl' );
if ((time () - $runtime) < 2) {
die ( "Die! Die! Die!" );
}
else {
echo "Welcome";
$memcache->set ( "floodControl", time () );
}
这只是一个示例代码..还有其他需要考虑的事情,例如
一个。更好的 IP
地址检测(代理、Tor)
B.当前操作
C.每分钟最大执行等...
D.在最大洪水等之后禁止用户
编辑 1 - 改进版本
用法
$flood = new FloodDetection();
$flood->check();
echo "Welcome" ;
类
class FloodDetection {
const HOST = "localhost";
const PORT = 11211;
private $memcache;
private $ipAddress;
private $timeLimitUser = array (
"DEFAULT" => 2,
"CHAT" => 3,
"LOGIN" => 4
);
private $timeLimitProcess = array (
"DEFAULT" => 0.1,
"CHAT" => 1.5,
"LOGIN" => 0.1
);
function __construct() {
$this->memcache = new Memcache ();
$this->memcache->connect ( self::HOST, self::PORT );
}
function addUserlimit($key, $time) {
$this->timeLimitUser [$key] = $time;
}
function addProcesslimit($key, $time) {
$this->timeLimitProcess [$key] = $time;
}
public function quickIP() {
return (empty ( $_SERVER ['HTTP_CLIENT_IP'] ) ? (empty ( $_SERVER ['HTTP_X_FORWARDED_FOR'] ) ? $_SERVER ['REMOTE_ADDR'] : $_SERVER ['HTTP_X_FORWARDED_FOR']) : $_SERVER ['HTTP_CLIENT_IP']);
}
public function check($action = "DEFAULT") {
$ip = $this->quickIP ();
$ipKey = "flood" . $action . sha1 ( $ip );
$runtime = $this->memcache->get ( 'floodControl' );
$iptime = $this->memcache->get ( $ipKey );
$limitUser = isset ( $this->timeLimitUser [$action] ) ? $this->timeLimitUser [$action] : $this->timeLimitUser ['DEFAULT'];
$limitProcess = isset ( $this->timeLimitProcess [$action] ) ? $this->timeLimitProcess [$action] : $this->timeLimitProcess ['DEFAULT'];
if ((microtime ( true ) - $iptime) < $limitUser) {
print ("Die! Die! Die! $ip") ;
exit ();
}
// Limit All request
if ((microtime ( true ) - $runtime) < $limitProcess) {
print ("All of you Die! Die! Die! $ip") ;
exit ();
}
$this->memcache->set ( "floodControl", microtime ( true ) );
$this->memcache->set ( $ipKey, microtime ( true ) );
}
}
关于php - 防止PHP脚本被淹没,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10155339/
如何在 iOS 中隐藏并显示标签栏,如 Groupon iPhone app是吗? 最佳答案 如果您不想弄乱实际的选项卡栏框架、子类化等,请使用伪选项卡栏。例如,将分段 Controller 放在不大
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
我刚刚开始学习一点关于 Canvas 的知识! 我想绘制在设定的时间间隔后闪烁的矩形(显示/隐藏/显示/隐藏/显示...)。 如果我删除 setInterval() 和 clear_canvas()
我正在编写一个小型 Android 游戏,每当我第一次运行时,一切都工作正常,但它会随机挂起并开始在 eclipse 的 LogCat 中无休止地发送垃圾邮件 12-30 12:40:05.344:
当我在具有 Google map fragment 的 Activity 上拖动 map 时,我的 logcat 充满了 "W/Google Maps Android API: GLHudOverla
上下文:这个命令是用python脚本生成的,它旨在连接不同格式的不同小视频,有0.5s的停顿,考虑到一些视频没有音轨。 ffmpeg.exe -report -i input0.mp4 -i inpu
我是一名优秀的程序员,十分优秀!