Domanda

Dopo aver effettuato un po 'di elaborazione, voglio impostare un valore di cookie sull'input dell'utente e quindi reindirizzarlo su una nuova pagina. Tuttavia, il cookie non viene impostato. Se commento il reindirizzamento, il cookie viene impostato correttamente. Presumo che questo sia un problema di intestazione di qualche tipo. Qual è la soluzione alternativa migliore per questa situazione?

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

Nota che setcookie restituisce true in entrambi i casi e non ricevo errori / avvisi / avvisi.

EDIT: sto usando Unix / Apache / MySQL / PHP

È stato utile?

Soluzione

Se hai URL umani o sottocartelle (come www.domain.com/path1/path2/), devi impostare il percorso dei cookie su / per lavorare su tutti i percorsi, non solo su quello corrente.

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

Dal manuale di PHP:

  

Il percorso sul server in cui il file   il cookie sarà disponibile su. Se impostato su   '/', il cookie sarà disponibile   all'interno dell'intero dominio. Se impostato su   '/ foo /', il cookie sarà solo   disponibile nella directory / foo /   e tutte le sottodirectory come   / foo / bar / of domain. Il predefinito   valore è la directory corrente che   il cookie è in fase di impostazione.

Altri suggerimenti

Suppongo che tu stia eseguendo IIS? Esiste un bug noto con versioni IIS inferiori a 7 quando si tenta di impostare un cookie e un'intestazione di posizione nella stessa richiesta.

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

Come stai testando se il cookie è impostato? I cookie sono disponibili nella pagina successiva dopo averli impostati.

  

Insidie ??comuni:

     

I cookie non saranno visibili fino al successivo caricamento di una pagina per cui il cookie dovrebbe essere visibile. Per verificare se un cookie è stato impostato correttamente, controllare il cookie in una pagina di caricamento successiva prima della scadenza del cookie. Il tempo di scadenza è impostato tramite il parametro di scadenza. Un buon modo per eseguire il debug dell'esistenza dei cookie è semplicemente chiamando print_r ($ _ COOKIE) ;.

Sono stato in grado di risolvere questo problema utilizzando un leggero ritardo nell'intestazione di aggiornamento. Impostiamo l'intestazione (che deve essere eseguita prima di qualsiasi metodo che potrebbe essere generato, come setcookie), quindi impostiamo i cookie. Ho aggiunto un messaggio in modo che l'utente non veda uno schermo vuoto per quei secondi.

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

Utilizza un URL relativo nell'intestazione:

@Header("Location: orders_9090_1.php");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top