Rumah > Soal Jawab > teks badan
Sebagai contoh, jika 5 teg dijana dalam masa satu minit, ia akan menggesa "Operasi yang kerap, sila masukkan kod pengesahan".
Bagaimana saya harus menanganinya?
PHPz2017-05-27 17:44:53
Ini sangat mudah untuk dilaksanakan menggunakan redis Kunci digunakan untuk menyimpan bilangan penyerahan Jika kunci dikira.
Dapatkan kiraan daripada redis setiap kali anda menyerahkan
Jika kiraan kosong, tetapkan nilai kiraan kepada 1, tetapkan tamat masa kepada satu minit, dan serahkan seperti biasa;
曾经蜡笔没有小新2017-05-27 17:44:53
Rekodkan masa penjanaan setiap teg
Jika peraturannya ialah hanya 4 teg boleh dijana dalam satu minit, yang kelima akan menggesa ralat
Sejurus sebelum menambah yang kelima, Bandingkan masa penjanaan yang pertama daripada empat yang terbaharu dengan masa semasa untuk melihat sama ada ia melebihi 60 saat Jika tidak, ralat akan dilaporkan.
怪我咯2017-05-27 17:44:53
Gunakan sesi untuk merekodkan dua nilai, satu ialah bilangan penyerahan $count dan satu lagi ialah masa penyerahan $time. ++$count==5 [Syarat 1] dikesan setiap kali ia diserahkan, time()-$time>=60 saat [Syarat 2]. cuma syaratnya dipenuhi 1 maka $count=0;$time=time();
世界只因有你2017-05-27 17:44:53
Adalah disyorkan untuk menggunakan operasi cache redis
<?php
try {
$redis = new Redis(); // 创建实例
$redis->connect(REDIS_HOST, REDIS_PORT, REDIS_TIMEOUT); // 连接
$redis->ping(); // 确认连接已经成功
} catch (Exception $e) {
die('Can not connect Redis.');
}
$incrkey = 'TEST:用户:分钟'; // 每分钟缓存key
$incrValue = $redis->incr($incrkey);
if ($incrValue == 1) {
// 设定缓存时间(键名,缓存时间[单位:秒])
$redis->expire($incrkey, 60);
} else if ($incrValue >= 5) {
die('操作频繁,请输入验证码');
}