Pregunta

Después de hacer un poco de procesamiento, quiero establecer un valor de cookie para la entrada del usuario y luego redirigirlos a una nueva página. Sin embargo, la cookie no se está configurando. Si comento el redireccionamiento, entonces la cookie se establece correctamente. Supongo que este es un tema de cabecera de algún tipo. ¿Cuál es la mejor solución para esta situación?

if($form_submitted) {
    ...
    setcookie('type_id', $new_type_id, time() + 60*60*24*30);
    header("Location: $url");
    exit;
}

Tenga en cuenta que setcookie devuelve true en cualquier caso y no obtengo errores / advertencias / avisos.

EDITAR: Estoy usando Unix / Apache / MySQL / PHP

¿Fue útil?

Solución

Si tiene urls o subcarpetas humanas (como www.domain.com/path1/path2/), debe configurar la ruta de las cookies a / para que funcione con todas las rutas, no solo con la actual.

if($form_submitted) {
    ...
    setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/');
    header("Location: $url");
    exit;
}

Desde el manual de PHP:

  

La ruta en el servidor en el que   La cookie estará disponible en. Si se establece en   '/', la cookie estará disponible   dentro de todo el dominio. Si se establece en   '/ foo /', la cookie solo será   disponible dentro del directorio / foo /   y todos los subdirectorios como   / foo / bar / de dominio. El valor por defecto   valor es el directorio actual que   la cookie se está configurando en.

Otros consejos

¿Supongo que está ejecutando IIS? Existe un error conocido con versiones de IIS menores a 7 al intentar establecer una cookie y un encabezado de ubicación en la misma solicitud.

http://support.microsoft.com/kb/q176113/

¿Cómo estás probando si la cookie está configurada? Las cookies están disponibles en la página siguiente después de configurarlas.

  

Errores comunes:

     

Las cookies no se harán visibles hasta la próxima carga de una página para la que la cookie debería estar visible. Para probar si una cookie se configuró con éxito, verifique la cookie en la próxima página de carga antes de que la cookie caduque. El tiempo de expiración se establece a través del parámetro de expiración. Una buena forma de depurar la existencia de cookies es simplemente llamando a print_r ($ _ COOKIE) ;.

Pude resolver este problema usando un ligero retraso en el encabezado de actualización. Establecemos el encabezado (que debe hacerse antes de cualquier método que pueda generar, como setcookie), y luego configuramos las cookies. Agregué un mensaje para que el usuario no vea una pantalla en blanco durante esos segundos.

    header("refresh: 2; url=$url");
    setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/');
    echo "Processing, please wait...";

Use una URL relativa en el encabezado:

@Header("Location: orders_9090_1.php");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top