Questo non dovrebbe mai accadere.
Senza esempi di codice che posso guardare, una ragione per cui posso immaginare che ciò accada è un flusso di lavoro di autenticazione come mostrato di seguito:
Nel seguente diagramma, /login
POST a /member
, dove avviene il controllo dell'autenticazione.
Se l'autenticazione passa, le pagine continuano a inviare il contenuto dell'utente connesso. Ciò rende questa pagina ( /member
) visualizzata nella cronologia dei browser. Ogni volta che fai clic sul pulsante Indietro / Avanti sul tuo browser per accedere a questa pagina, ti verrà chiesto se desideri POSTARE il contenuto del modulo in questa pagina. In questo caso, la data è credenziali di accesso.
WRONG WAY:
+---------------------------+ +------------------------------+
| Login Page (/login) | | Member Page(/member) |
|---------------------------| |------------------------------|
| +--------------+ | | if creds wrong |
| UserName | | | | redirect_to /login |
| +--------------+ |+-------->| else |
| +--------------+ | | "Welcome Back, |
| Password | | | | Here is your super secret |
| +--------------+ | | member area where you can |
| | | check out the cool stuff" |
+---------------------------+ | end |
+------------------------------+
Invece dovresti avere questo tipo di flusso di autenticazione:
- I post della pagina di accesso a una pagina di
/verify
(o / auth
come lo chiami tu).
- La pagina di verifica non ha alcun output http. A seconda che i crediti siano buoni o cattivi, è sufficiente reindirizzare alla pagina appropriata. Se l'accesso è valido, imposta una bandiera cookie che indica una sessione valida.
- La pagina membro convalida la sessione controllando il valore del cookie e reindirizza alla pagina
/login
se la sessione è scaduta / non impostata.
In questo flusso di lavoro, la pagina /verify
non viene mai visualizzata nella cronologia del browser e non è possibile che l'utente possa "fare clic su Aggiorna" su quella pagina per far sì che i dati POST vengano nuovamente inviati.
CORRECT WAY POST +-----------------------------+
+------------>| Verify page (/verify) |
| |-----------------------------|
+-------------------------+-+ | if creds wrong |
| Login Page (/login) |<---+---------+redirect_to /login |
|---------------------------| | | else |
| +--------------+ | | | set_session_cookie |
| UserName | | | | +-------+redirect_to /member |
| +--------------+ | | | | end |
| +--------------+ | | | | |
| Password | | | | | +-----------------------------+
| +--------------+ | | |
| | | | +------------------------------+
+---------------------------+ | +----->| Member Page(/member) |
| |------------------------------|
| | if session_cookie not set |
+-----------+redirect_to /login |
| else |
| "Welcome Back, |
| Here is your super secret |
| member area where you can |
| check out the cool stuff" |
| end |
+------------------------------+
Questo è il modello comune di Post / Redirect / Get. Puoi controllare questa pagina wiki per immagini più belle: link
Inoltre, se vuoi impedire al browser di memorizzare alcune pagine HTML, puoi impostare l'intestazione HTTP di controllo della cache su "no-cache" per quelle pagine.
Cache-Control: no-cache