reinvio dati via POST

ave ^^

ho già letto questo topic, tuttavia avrei ancora qualche altra domanda...

espongo la mia situazione. sto provando a scrivere tutto il mio test sulla index.php con relativi include di file *.php e chiamate a relative funzioni. il primo include e la prima funzione tratta del login. al momento del submit (e la form si conclude con un exit) ricarica l'index, ricaricherà tutto dall'inizio e la stessa funzione (dove risiedeva il login) si renderà conto che è stata inviata quella form, crea la sessione (se i dati son ok) e fa proseguire con il prossimo step (cioè prossimo include e prossima funzione). questo secondo step, fra le altre cose, contiene il pulsante di logout. bene, clicko su logout ed esce, ricaricando l'index e ritrovandosi alla prima funzione chiamata e con un exit finale.

problema: a questo punto, nel momento in cui clicko su "indietro" (pulsante di qualunque browser), mi chiede di inviare nuovamente i dati via POST, accetto, e ta - dah! mi ritrovo loggato "come se niente fosse": questo non va bene.

domande: come faccio ad eliminare la finestra che richiede di inviare nuovamente i dati via POST? o meglio, come faccio a cancellare i dati in POST, cosichè premendo il pulsante "indietro" in ogni caso mi dà la form login? è possibile fare tutto ciò, oppure la soluzione del topic linkato è l'unica disponibile?

aggiungo che non uso DB per i login (si tratta di un test) e che quindi faccio tutto via file...

se c'è qualcosa di non chiaro, chiedete!

grazie

inviato 8 anni fa
larchitetto
X 0 X

Sono il promotore di quel topic  ...... quindi ho studiato molto ..... ho letto due tre volte la tua descrizione ma forse fai prima se includi il codice .. relativo agli script che ti creano il problema .... forse e tardi e faccio veramente fatica a capire ... cosa hai scritto .... . cmq se vuoi posso aiutarti per quello che ne ho capito ....

due teste sono meglio di una .. quindi aspetto tue notizie ciao

risposto 8 anni fa
costaplus
X 0 X

beh il codice... è un po' lunghetto. cosa non hai capito di preciso?

risposto 8 anni fa
larchitetto
X 0 X

Bè allora facciamo cosi' ti spiego come faccio il logout direttamente senza incorrere nel tuo problema che mi sembra simile a quello del post che rinvia la query a mysql .....

praticamente la chiusura la faccio cosi'  ....

index.php

---------codice  index.php-----------------

codice ..... codice......
echo "<a href=\"logout.php\">log out</a>";

codice ......

--------fine codice -----------------

logout.php

---------codice  logout.php-----------------

<?php
session_start();
session_unset();
session_destroy();
?>
<a href="index.php">Torna a home page</a>

--------fine codice -----------------

Prova cosi' .....

risposto 8 anni fa
costaplus
X 0 X

mmm presa visione del codice da te postato...

spiego meglio un po' quello che ho osservato.

non appena l'utente logga e poi subito dopo clicka per il logout, potrà benissimo tornare indietro via browser, il quale gli chiederà che ci son dei dati POST da inviare. accetterà l'invio, la pagina torna indietro e l'utente si ritrova loggato e validato senz'aver effettivamente inserito i dati (perchè eran già nell'array POST).

facendo dei tentativi, ho notato che dopo un po' di tempo, questi dati spariranno.

la mia domanda era questa: sto problema qua è dovuto dal fatto che io abbia fatto tutto sullo stesso script php (di fatto ogni form richiama il medesimo file) e che magari facendo dei "jump" fra file diversi (come postato da te che mando i dati a diversi script php) risolvo, oppure (domanda clou) esisterebbe un modo per poter risolvere pur mantenendo la struttura da me prevista? XD

grazie

risposto 8 anni fa
larchitetto
X 0 X

Il problema del "reinvio dei dati POST" è piuttosto comune nelle applicazioni web, indipendentemente dal linguaggio di programmazione usato e da come sono organizzati gli script.

Se dalla pagina A raggiungi la pagina B con un POST (invio del form) e poi raggiungi la pagina C, allora se si preme il bottone "indietro" del browser significa che si vuole rivedere la pagina B. Ma il browser ricorda che per ottenere la pagina B ha dovuto inviare un form (quello della pagina A) e quindi la richiesta della pagina B lo costringe a reinviare i dati: il browser non conosce altro modo per vedere la pagina B.

Una soluzione a questo problema è usare una richiesta intermedia tra A e B che si limiti ad effettuare il redirect verso B.

A (POST) -> B (REDIRECT) -> B -> C

Lo script B elabora il form inviato da A e termina la sua esecuzione con un redirect, senza generare output:

header("location: b.php");
exit;

A questo punto B viene richiamato nuovamente, questa volta per mostrare la pagina web di risposta.

Se adesso si raggiunge C e si cerca di tornare indietro il browser raggiungerà la pagina B senza dover reinviare i dati del form.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ecco gianni :) chiaro e lapidario :D

dunque spulciando e leggendo e vedendo un meraviglioso riassunto (il tuo post) avevo capito che quest'era il modo e che a quanto pare il mio progetto - test è destinato al fallimento se non applico queste semplici strategie.

altra curiosità sempre attinente al topic. forum et similia, dopo il login e dopo la pubblicazione dei post, arrivano ad una pagina (con tanto di output), subito dopo ricaricano una nuova pagina che riporta dove serve (nel caso di un post, nell'elenco dei forum, ad esempio).

bene, header non vuole output; quella pagina come ricarica?? io ho pensato che è stata creata per l'elaborazione dei dati e l'output per poi ricaricare via tag html (<META HTTP-EQUIV = "REFRESH" content = "<sec>; URL=nome_file">)... che ne dite?

grazie

risposto 8 anni fa
larchitetto
X 0 X

Se la pagina viene ricaricata senza che l'utente faccia nulla allora si tratta o di Javascript o del tag che hai citato.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

beh si ricaricano da sè, ma hanno anche dei link se l'utente non vuol aspettare oltre...

a sto punto penso sia javascript, e non semplice html...

risposto 8 anni fa
larchitetto
X 0 X

con questo tag e senza javascript viene caricata una nuova_pagina.php dopo 5 secondi:

<meta http-equiv="refresh" content="5;url=http://www.tuosito.it/nuova_pagina.php" />

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda