|
|
|
สอบถามการนับ ในการกด submit ว่าถ้าเกิน 5 ครั้ง ไม่สามารถมา login ได้ ต้องรอ 5 นาที ถึงสามารถ login ได้อีกครั้ง รบกวนเขียนแนวcode ให้ดูหน่อยครับ |
|
|
|
|
|
|
|
ในตาราง User ได้ออกแบบฟิวส์สำหรับจัดเก็บจำนวนครั้งที่ Login ผิดหรือเปล่าครับ น่าจะเช็คไม่ยากครับ
ส่วนพวกที่ให้รอ 5 นาที ลองดูพวก DateDiff ใน MySQL ครับ
|
|
|
|
|
Date :
2013-03-04 20:54:24 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อย่างง่ายที่สุด
ไม่ต้องยุ่งกับฐานข้อมูล แต่เก็บที่ $_SESSION ครับ
Code (PHP)
// ตรวจว่ามีตัวแปร $_SESSION['login_suspended'] สร้างขึ้นมาหรือยัง
// ซึ่งถ้ามีแสดงว่าตอนนี้ถูก "ห้ามล็อกอิน" อยู่
if (isset($_SESSION['login_suspended'])) {
// หาเวลาที่ผ่านไปหลังจากการถูกห้ามล็อกอิน
$diff = time() - $_SESSION['login_suspended'];
// หากเวลาที่ผ่านไปยังไม่ถึง 5 นาที (60 * 5 = 300)
if ($diff < 300) {
// แสดงข้อความ
echo 'กรุณารออีก ' . (300 - $diff) . ' วินาที ก่อนการล็อกอินครั้งต่อไป';
// จบการทำงาน
exit;
} else {
// ทำลายตัวแปรที่เกี่ยวเนื่องกับการล็อกอินผิดพลาดให้หมด
unset($_SESSION['login_error_count'], $_SESSION['login_suspended']);
}
}
// สมมติว่าตรงนี้เป็นส่วนทำการตรวจสอบชื่อผุ้ใช้ รหัสผ่าน
// และสมมติว่าหากรหัสผ่านไม่ถูกต้อง $password_incorrect จะมีค่า true นอกนั้น false
if ($password_incorrect) {
// $_SESSION['error_count'] เป็นตัวแปรที่จะบอกว่ารหัสผ่านผิดกี่ครั้ง
// หาก $_SESSION['error_count'] ถูกสร้างขึ้นมาแล้ว
if (isset($_SESSION['error_count'])) {
// บวกค่าของมันเลย
$_SESSION['login_error_count']++;
} else {
// นอกนั้นให้ค่าเริ่มต้นเป็น 1
$_SESSION['login_error_count'] = 1;
}
// หากรหัสผ่านผิดมากกว่า 5 ครั้ง
if ($_SESSION['login_error_count'] > 5) {
// สร้างตัวแปร $_SESSION['login_suspended'] ที่บอกว่า ขณะนี้ถูกห้ามล็อกอิน
// โดยมีค่าเป็นเวลา ณ จดที่ถูกห้ามล็อกอิน
$_SESSION['login_suspended'] = time();
// แสดงข้อความเตือน
echo 'รหัสผ่านผิดเกิน 5 ครั้ง ต้องรออีก 5 นาทีจึงจะสามารถล็อกอินครั้งต่อไป';
// จบการทำงาน
exit;
}
// แสดงข้อความเตือน พร้อมจำนวนครั้งที่ผิด
echo "รหัสผ่านไม่ถูกต้อง (ครั้งที่ $_SESSION[login_error_count]/5)";
// จบการทำงาน
exit;
}
// หากรหัสผ่านถูก ทำลายตัวแปรที่บอกว่ารหัสผ่านผิดเสีย (แม้จะไม่เคยเกิดขึ้นเลยก็ตาม)
unset($_SESSION['login_error_count']);
|
|
|
|
|
Date :
2013-03-05 04:55:15 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แจ่มครับ เมื่อคืนว่าจะเขียนให้ แตใช้เครื่อง mac
|
|
|
|
|
Date :
2013-03-05 05:56:55 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
นอนกลางวันแทนเหรอครับ
|
|
|
|
|
Date :
2013-03-05 06:22:27 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ประมาณนั้นครับ
|
|
|
|
|
Date :
2013-03-05 06:25:56 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากครับ กำลังสนใจอยู่พอดี
|
|
|
|
|
Date :
2013-03-05 10:51:52 |
By :
patz8899 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 00
|