2010-05-10 11 views
7

Domanda veloce: è possibile impostare il percorso in cui un cookie è valido, ma è anche possibile ottenere (leggi) questo percorso dal cookie (in PHP)?È possibile ottenere il percorso di un cookie memorizzato?

Oppure: è possibile prolungare il tempo di un cookie, senza sapere in quale percorso si trova (ma mantenendo lo stesso percorso)?

+0

È necessario correggere la logica dell'applicazione. Non è necessario trovarsi in uno stato in cui non si conoscono le impostazioni dei cookie utilizzate in precedenza. Basta memorizzare il percorso che hai usato in 'setcookie (...)' e poi usarlo per riscrivere il cookie. – caw

risposta

8

Poiché la maggior parte dei browser usano ancora le specifiche di Netscape (vedi cached version of http://wp.netscape.com/newsref/std/cookie_spec.html) e non quello indicato nel RFC 2109 o RFC 2965, gli elementi della lista nel campo di intestazione Cookie richiesta sarà consistere solo del nome e il valore coppia:

Quando si richiede un URL da un server HTTP, il browser corrisponderà all'URL con tutti i cookie e se uno di essi corrisponde, una riga contenente le coppie nome/valore di tutti i cookie corrispondenti sarà inclusa nella richiesta HTTP. Qui è il formato di quella linea:

Cookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 ... 

Solo le specifiche più recenti (RFC 2109 e RFC 2965) consentono al cliente di inviare il percorso all'interno della richiesta (estratto da RFC 2109):

la sintassi per l'intestazione è:

cookie   =  "Cookie:" cookie-version 
         1*((";" | ",") cookie-value) 
cookie-value =  NAME "=" VALUE [";" path] [";" domain] 
cookie-version =  "$Version" "=" value 
NAME   =  attr 
VALUE   =  value 
path   =  "$Path" "=" value 
domain   =  "$Domain" "=" value 

[...] il valore per l'attributo percorso deve essere il valore dall'attributo Path eventuale 012.351.641.061.dell'intestazione di risposta Set-Cookie corrispondente. In caso contrario, l'attributo deve essere omesso dall'intestazione della richiesta Cookie. [...]

+0

Ah, giusto, e non posso aspettarmi che tutti gli utenti abbiano questa nuova specifica. Quindi ho bisogno di trovare un altro approccio. – RemiX

+0

@RemiX: No, sfortunatamente la maggior parte dei browser usa ancora la vecchia specifica. – Gumbo

0

Non c'è modo per PHP di leggere il percorso del cookie perché il browser invia al server solo i valori dei cookie che devono essere inviati, niente di più.

Si potrebbe provare a reimpostare i cookie senza dare il percorso ma dubito fortemente che funzionerà. Potrebbero esserci molti diversi cookie rilevanti con lo stesso nome e percorsi meno precisi. Se hai provato a impostare un cookie con lo stesso nome ma senza il percorso, il browser non saprebbe quale dei cookie dovrebbe aggiornare (forse il percorso più accurato? Ma questo potrebbe portare a errori (di sicurezza?) Quando un cookie preciso ti aspetti di essere set non è impostato).

1

sì è possibile modificare/estendere il tempo del cookie quando il cookie è impostato come cookie di root. Dovresti impostare il cookie con "/" nell'ultimo parametro. vedere il codice qui sotto ...

setcookie("Message", $msg, time()+60, "/");

se non, in fondo i biscotti saranno memorizzati nel percorso corrente (root page). puoi provare ad accedervi.

+0

Grazie, ma sfortunatamente voglio anche che funzioni quando non è un cookie di root (se usassi solo i cookie di root, conoscerei già il "percorso" e non avrei questo problema). – RemiX

3

includere il percorso nel valore del cookie anche

Problemi correlati