Kullanıcıların kullanıcıların bunu sağlamak için bir mekanizma var ama nedense hala olur, iki kez belirli bir eylem gerçekleştirerek ile bazı sorunlar var. İşte bizim mevcut mekanizma nasıl işliyor:
- Client side: düğmesi 1 tıklama sonra devre dışı kalacaktır.
- Server side: Biz eşleşen kez, anahtar silinir, OTURUMLARIN depolanan anahtar karşı kontrol edilecektir URL önemli bir karma var.
- Eylem gerçekleştirildikten sonra Database side:, kullanıcı eylemi tamamladı belirten bayraklı gereken bir alan vardır.
Ancak, tüm bu önlemler, hala iki eylemi gerçekleştirmek mümkün kullanıcılar herhangi daha güvenli yöntemler, orada vardır?
Burada veritabanı tarafı için kısmi kodu:
$db->beginTransaction();
// Get the user's datas
$user = $db->queryRow("SELECT flag FROM users WHERE userid = {$auth->getProperty('auth_user_id)}");
if ($user['flag'] != 0) {
$db->rollback();
// Return with error
return false;
}
// Proceed with performing the action
// --- Action Here ---
// Double checking process, the user data is retrieved again
$user = $db->queryRow("SELECT flag FROM users WHERE userid = {$auth->getProperty('auth_user_id)}");
if ($user['flag'] != 0) {
$db->rollback();
// Return with error
return false;
}
// --- The final inserting query ---
// Update the flag
$db->query("UPDATE users SET flag = 1 WHERE userid = {$auth->getProperty('auth_user_id)}");
$db->commit();
return true;