Non utilizzare le richieste GET per apportare modifiche! Be RESTful; usa POST (o PUT) invece il browser dovrebbe avvisare l'utente di non ricaricare la richiesta. Il reindirizzamento (using HTTP redirection) a una pagina di ricevuta utilizzando una normale richiesta GET dopo una richiesta POST/PUT renderà possibile aggiornare la pagina senza essere avvisati sulla reinvio.
EDIT:
Presumo l'utente è connesso in qualche modo, e quindi si ha giá qualche modo di tracciare l'utente, ad esempio, sessione o simili.
Si potrebbe fare un timestamp (o un hash casuale, ecc ..), quando si visualizza il modulo di memorizzazione sia come un campo nascosto (appena oltre l'anti cross-site request gettone Sono sicuro che giá ci sono) e in una variabile di sessione (che è memorizzata in modo sicuro sul tuo server), quando ricevi una richiesta POST/PUT per questo modulo, controlli che il timestamp sia lo stesso di quello in sessione. Se lo è, si imposta il timestamp nella sessione su qualcosa di variabile e difficile da indovinare (timestamp concatenato con una stringa segreta per esempio), quindi è possibile salvare i dati del modulo. Se qualcuno ripete la richiesta ora non troverà lo stesso valore nella variabile di sessione e negherà la richiesta.
Il problema con questo è che il modulo non è valido se l'utente fa clic indietro per modificare qualcosa, e potrebbe essere un po 'troppo duro, a meno che non si stia aggiornando. Quindi, se hai problemi con gli utenti "stupidi" che aggiornano e fanno clic sul pulsante indietro, quindi ripubblicando accidentalmente qualcosa, basta usare il POST per ricordare loro di non farlo, e il reindirizzamento lo renderà meno probabile. Se hai un problema con utenti malintenzionati, dovresti usare anche un timestampt, anche se a volte confonderà gli utenti, anche se gli utenti pubblicano deliberatamente lo stesso messaggio più volte e probabilmente devi trovare un modo per vietarli. Usare il POST, avere un timestam e persino fare un confronto completo dell'intero database per verificare la presenza di post duplicati, non aiuta affatto se gli utenti malintenzionati scrivono uno script per caricare il modulo e inviare automaticamente i rifiuti casuali, automaticamente. (Ma la protezione delle richieste incrociate rende molto più difficile)
fonte
2008-11-20 15:47:31
L'OP si lamenta dei suoi utenti che incasinano il sistema. Dire "fai in modo che il browser provi e fermali" non è certo una soluzione in grado di risolvere il problema. –
No, ma è meno probabile che gli utenti benevoli lo facciano, ho aggiunto alcune idee per ridurre ulteriormente il problema. –