Ragazzi ho un problema: volevo fare un sistema in modo tale che dopo 8 tentativi di login per 5 minuti non faccia più inviare nulla. Ho deciso di sfruttare la tabella che ho nel database che rileva i visitatori online. Ho aggiunto un campo"flood" che si incrementa ad ogni tentativo errato. Fin qui tutto ok. Il sistema fa in modo di incrementar quel campo a tutti i record con quel determinato IP. Il problema arriva quando il visitatore visita un'altra pagina. A quel punto nel database viene inviata una query con il campo flood impsotato a 0. Il mio sistema funziona finchè il visitatore, visita solo la pagina del login, se va in un'altra pagina per il motivo già citato il login è subito disponibile (per il campo flood impostato a 0). Sapete come posso risolvere la cosa? avete suggerimenti da darmi? Metodi migliori? Grazie mille.
Perchè, visitando altre pagine, esegui la query che azzera quel campo?
Per altri scopi (vista la natura della tabella)?
Se è così, ti consiglio di usare un altro campo dedicato, anzi, io farei proprio un'altra tabella dedicata, anche perchè con gli utenti online non c'entra poi molto.
Non si azzerano i campi, semplicemente si inserisce una query nel database con l'altra pagina visitata e giustamente il campo flood a 0 (in questo caso ci stanno sia query con il campo a 8 sia query con il campo a 0... un casino :P).
Anch'io stavo pensando di fare un'altra tabella, ma ancora non ho capito bene come strutturare logicamente la cosa.
Cioè:
Creo una tabella: ip - timestamp - flood
In questo modo riconoscendo l'ip vedo quanti tentativi errati ha fatto, incrementando il campo flood. Il timestamp mis erve per vedere se sono passati 5 minuti e solo a quel punto riazzero il campo flood.
Ma in questo modo mi rimarranno nel database per sempre tutti gli indirizzi ip che hanno visitato il mio sito... non è che lo appesantisce? E in caso ci sono due visitatori diversi con lo stesso IP?
Ultima modifica di silverseraph : 24-07-2007 alle ore 14.48.01
Allora potresti aggiornare il campo già esistente anzichè crearne uno nuovo per ogni pagina visitata, così hai due vantaggi, leggerezza (parecchi record in meno, uno per utente praticamente) e ti gestisci tutto in una tabella.
Poi se ci sono altri problemi usando questo metodo, allora sarebbe il caso di usare una tabella dedicata.
Si, però stavo pensando: nella mia tabella dei visitatori online cancello automaticamente quelli inattivi da 3 minuti. Quindi mettiamo caso che un utente non esegua più operazioni nell'attesa dell'anti flood... potrebbe cavarsela dopo 3 minuti e non più 5. Penso proprio che debba crearmi una tabella dedicata, ma ritorna il problema di prima: in questo modo mi rimarranno nel database per sempre tutti gli indirizzi ip che hanno visitato il mio sito... il database penso che si appesentirà notevolmente (non per gli inizi, ma mettiamo caso che il sito faccia successo :P)
Prevedi un sistema di prune automatico ogni tot tempo (la query di cancellazione la fai assieme a quella di aggiornamento e/o di inserimento).
Oppure non so!