Redirigir no funciona con encabezado (ubicación) y variable de sesión

1: uso register.php para suscribir clientes

2: los datos recostackdos del formulario se envían a 1.php, se guardan en la base de datos

3: después de que los datos del formulario se guardan en la base de datos, 1.php envía los datos del formulario seleccionado (myValue) a register.php? MyValue = ‘abc’

en 1.php, estoy guardando una variable de sesión como esta

@session_start(); $_SESSION['color']='blue'; 

el código de register.php es

  if (isset($_SESSION['color'])) { header('Location: http://mydomain.com/thankyou.php'); } else { @session_start(); some other stuff that was initially use for signing up the clients 

mi lógica es verificar la variable de sesión y redirigirla a otra página

cuando se completan el paso 1, el paso 2 y el paso 3, la página se debe redirigir a thankyou.php

Actualmente, cuando finalizan el paso 1, el paso 2, el paso 3, en lugar de abrir thankyou.php, se abre la siguiente página

 http://mydomain.com/register.php?myValue='abc' 

sin embargo, si vuelvo a abrir register.php o vuelvo al paso uno (abriendo register.php), se muestra thankyou.php …

¿Alguien puede guiarme hacia donde estoy haciendo el error? ¿Por qué la redirección no está teniendo éxito aunque se están creando variables de sesión?

actualización de código

Probé el siguiente código en la parte superior de mi register.php

 @session_start(); if (isset($_SESSION['color'])) { header('Location:http://mydomain.com/thankyou.php'); exit; } else{ remaining stuff 

de vez en cuando hace el truco, redirige a la página, mientras que en ocasiones (mayor en número), falla al redirigir a thankyou.php ,, también el código necesita borrar el historial completo y el caché para funcionar (después de hacerlo, todavía se pierde hits) ocurre..)

En su register.php, no puede probar la variable de sesión antes de emitir session_start, por lo que su código debería ser más parecido a:

 session_start(); if (isset($_SESSION['color'])) { header('Location: http://mydomain.com/thankyou.php'); } else { // Something else.... 

EDITAR:

Otra cosa que he encontrado útil al tratar de establecer la variable de sesión junto con los redireccionamientos es proceder a la redirección solo después de ejecutar una función. Así es como funcionaría:

 $throwAwayVariable = setColor('blue'); if($throwAwayVariable ){ // separated out into a function so it wouldn't redirect before the session variable was saved session_write_close(); header("Location: http://mydomain.com/thankyou.php"); } function setColor($color){ @session_start(); $_SESSION['color']='blue'; return true; } 

Como no se publica todo tu código, tendrás que averiguar a dónde va esto, pero siempre he tenido mis vars de sesión funcionando después de este proceso.

Asegúrese de usar exit (0); justo después de hacer un redireccionamiento de encabezado, de lo contrario php analizará y ejecutará el rest del script, a veces puede causar un comportamiento extraño.

Su llamada session_start() en register.php debe ser ANTES de llamar a cualquier variable $_SESSION .

Tengo el mismo problema, luego trato de agregar session_start y session_write_close , ¡y funciona!

 session_start(); $_SESSION['status'] = 'Updated Poem successfully'; session_write_close(); header("location: index.php");