Volver a la página anterior con encabezado ("Ubicación:"); en PHP


Respuestas:


246

tratar:

header('Location: ' . $_SERVER['HTTP_REFERER']);

Tenga en cuenta que esto puede no funcionar con páginas seguras (HTTPS) y es una idea bastante mala en general, ya que el encabezado puede ser secuestrado, enviando al usuario a otro destino. El encabezado ni siquiera puede ser enviado por el navegador.

Idealmente, querrá:

  • Agregue la dirección de retorno a la solicitud como una variable de consulta (por ejemplo,? Back = / list)
  • Defina una página de retorno en su código (es decir, todos los envíos de formularios exitosos redirigen a la página de listado)
  • Proporcione al usuario la opción de a dónde quiere ir a continuación (por ejemplo, Guardar y continuar editando o simplemente Guardar)

19
Cosas más extrañas han sucedido :)
Dimitry

3
@Col para que puedas probar un problema práctico con esto?
Pekka

1
Usar el árbitro, después de probar previamente si está configurado y es válido, en un contexto definido de página a página puede ser una práctica perfectamente aceptable: la gran mayoría de los navegadores envía un HTTP_REFERER adecuado.
Pekka

1
@Col. Utilicé esto en producción cuando tuve que hacer algo para una demostración. Como puede ver en mi respuesta, proporciono otras tres soluciones a las que recurriría en lugar de la redirección basada en HTTP_REFERER.
Dimitry

2
@Madmartigan que suena como un comportamiento realmente extraño, la única pista que puedo ver en la red es que hay algunos problemas de redireccionamiento. De todos modos, estoy de acuerdo en que usar el árbitro no es el camino si necesitas 100% de seguridad
Pekka

22

Es tan simple, solo usa esto

header("location:javascript://history.go(-1)");

Esta trabajando bien para mi


2
Esto sonaba muy inteligente, pero en FF10 entiendo. "Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."Esto es básicamente inutilizable.
Wesley Murch

Wesley Murch, funciona bien para mí en casi todos los principales navegadores, incluido el que has mencionado. Solo funciona para ti en caso de que llegues a la página con algo en la historia.
Hammad

55
Esto puede hacer que la página anterior se sirva desde la memoria caché del navegador.
aksu

14

Tienes que guardar esa ubicación de alguna manera.

Digamos que es un formulario POST, simplemente coloque la ubicación actual en un campo oculto y luego úselo en la header()Ubicación.


14

Solo una pequeña adición: creo que es algo común y conocido agregar exit;después de la función de encabezado en caso de que no queramos que el resto del código se cargue o ejecute ...

header('Location: ' . $_SERVER['HTTP_REFERER']);
exit;

Es solo para mi.
Alexander Guo

2

Solo intenta esto en Javascript:

 $previous = "javascript:history.go(-1)";

O puedes probarlo en PHP:

if(isset($_SERVER['HTTP_REFERER'])) {
    $previous = $_SERVER['HTTP_REFERER'];
}

1

Almacenar la URL anterior en una variable de sesión es malo, porque el usuario puede hacer clic derecho en varias páginas y luego volver y guardar.

a menos que guarde la URL anterior en la variable de sesión en un campo oculto en el formulario y después de guardar el encabezado ("Ubicación: guardar URL de la página de llamada");


¿por qué no podemos usar el $ _SERVER ['http_referrer']?
Vignesh
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.