Retour à la page précédente avec en-tête («Location:»); en PHP
124
Le titre de cette question explique en quelque sorte ma question. Comment rediriger le visiteur de la page PHP vers sa page précédente avec leheader( "Location: URL of previous page" );
Notez que cela peut ne pas fonctionner avec les pages sécurisées (HTTPS) et c'est une très mauvaise idée dans l'ensemble car l'en-tête peut être détourné, envoyant l'utilisateur vers une autre destination. L'en-tête peut même ne pas être envoyé par le navigateur.
Idéalement, vous voudrez soit:
Ajoutez l'adresse de retour à la requête en tant que variable de requête (par exemple? Back = / list)
Définissez une page de retour dans votre code (c'est-à-dire que toutes les soumissions de formulaire réussies sont redirigées vers la page de liste)
Fournir à l'utilisateur l'option de l'endroit où il souhaite aller ensuite (par exemple, enregistrer et continuer à modifier ou simplement enregistrer)
@Col pour que vous puissiez prouver un problème pratique avec cela?
Pekka
1
Utiliser le référent, après avoir testé au préalable s'il est défini et valide, dans un contexte de page à page défini peut être une pratique parfaitement acceptable - la grande majorité des navigateurs envoie un HTTP_REFERER approprié.
Pekka
1
@Col Je l'utilise en production quand je devais faire quelque chose pour une démo. Comme vous pouvez le voir dans ma réponse, je propose trois autres solutions vers lesquelles je me tournerais au lieu de la redirection basée sur HTTP_REFERER.
Dimitry
2
@Madmartigan qui ressemble à un comportement vraiment étrange, le seul indice que je peux voir sur le net est à l'origine de problèmes de redirection. Quoi qu'il en soit, je suis d'accord que l'utilisation du référent n'est pas la solution si vous avez besoin de 100% de sécurité
Cela semblait vraiment intelligent, mais dans FF10 je reçois "Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."donc c'est fondamentalement inutilisable.
Wesley Murch
Wesley Murch, cela fonctionne très bien pour moi dans presque tous les principaux navigateurs, y compris celui que vous avez mentionné. Cela ne fonctionne que pour vous uniquement dans le cas où vous êtes venu sur la page ayant quelque chose dans l'histoire.
Hammad
5
Cela peut entraîner la diffusion de la page précédente à partir du cache du navigateur.
aksu le
14
Vous devez enregistrer cet emplacement d'une manière ou d'une autre.
Disons que c'est un formulaire POST, placez simplement l'emplacement actuel dans un champ masqué, puis utilisez-le dans l' header()emplacement.
Juste un petit ajout: je pense que c'est une chose courante et connue à ajouter exit;après la fonction d'en-tête au cas où nous ne voudrions pas que le reste du code se charge ou s'exécute ...
Le stockage de l'URL précédente dans une variable de session est mauvais, car l'utilisateur peut faire un clic droit sur plusieurs pages, puis revenir et enregistrer.
sauf si vous enregistrez l'url précédente dans la variable de session dans un champ caché du formulaire et après enregistrer l'en-tête ("Emplacement: enregistrer l'URL de la page appelante");
Réponses:
essayer:
Notez que cela peut ne pas fonctionner avec les pages sécurisées (HTTPS) et c'est une très mauvaise idée dans l'ensemble car l'en-tête peut être détourné, envoyant l'utilisateur vers une autre destination. L'en-tête peut même ne pas être envoyé par le navigateur.
Idéalement, vous voudrez soit:
la source
C'est si simple, utilisez ceci
Ça marche bien pour moi
la source
"Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."
donc c'est fondamentalement inutilisable.Vous devez enregistrer cet emplacement d'une manière ou d'une autre.
Disons que c'est un formulaire POST, placez simplement l'emplacement actuel dans un champ masqué, puis utilisez-le dans l'
header()
emplacement.la source
Juste un petit ajout: je pense que c'est une chose courante et connue à ajouter
exit;
après la fonction d'en-tête au cas où nous ne voudrions pas que le reste du code se charge ou s'exécute ...la source
Essayez simplement ceci en Javascript:
Ou vous pouvez l'essayer en PHP:
la source
Le stockage de l'URL précédente dans une variable de session est mauvais, car l'utilisateur peut faire un clic droit sur plusieurs pages, puis revenir et enregistrer.
sauf si vous enregistrez l'url précédente dans la variable de session dans un champ caché du formulaire et après enregistrer l'en-tête ("Emplacement: enregistrer l'URL de la page appelante");
la source