PDA

View Full Version : [PHP] IE8 e sessioni


anonimizzato
24-03-2009, 12:05
Ciao a tutti,

purtroppo è difficile da spiegare ma io ci provo:

l'altro giorno ho installato IE8 su uno dei PC che abbiamo in azienda per verificare come fosse il nuovo browser MS e mi sono accorto con raccapriccio che alcune funzionalità di siti da noi appena creati non andavano.

Nello specifico trattasi di <SELECT> dinamiche generate in AJAX.

Premetto subito che in realtà AJAX funziona correttamente ovvero il contenuto dinamico viene generato ed inglobato nella pagina principale senza problemi, il punto è che per le varie <SELECT> non vengono mantenuti le OPTION -> SELECTED.

Essendo il codice che genera le <SELECT> in una pagina PHP a se utilizzo le sessioni per tenere traccia dei vari valori impostati e tutto funziona sempre bene con IE6/7, FF, Opera, Chrome ecc.

Dove sembra essere l'inghippo di cui però non riesco a capacitarmi?

Nell'header.php comune a tutte le pagine (ma NON presente nella pagina php delle select dinamiche) imposto un blocco di codice simile es:


if ($PAGINAID != 15) {
unset($_SESSION['news'])
}


Questo cosa vuole dire in 2 parole, che se sto visualizzando una pagina che non ha l'ID 15 e quindi non è la pagina di elenco news, svuoto la sessione relativa in modo che quando poi torno all'archivio news: azzero il paginato, il n° di news per schermata ecc.

Indi per cui pur NON essendoci alcun richiamo a tale blocco di codice nella pagina PHP che genera le select dinamiche, mi trovo in questa pagina con la sessione svuotata, cosa che si risolve se nell'header.php commento il blocco codice di cui sopra ma ... NON HA SENSO!

Il fatto, lo ripeto, è che con TUTTI gli altri browser un problema simile NON mi capita!

Secondo voi da cosa può dipendere?

Thanks in advance!

anonimizzato
24-03-2009, 14:30
Adesso credo di aver "risolto" ma ... o sono impazzito io (facile) o è impazzito IE8.

Nell'header.php se invece di scrivere:

if ($PAGINAID != 14 && $PAGINAID != 15) {
unset($_SESSION[DOMINIO]['news']);
}

metto:

if (isset($PAGINAID) && $PAGINAID != 14 && $PAGINAID != 15) {
unset($_SESSION[DOMINIO]['news']);
}

tutto funziona.

Perchè? l'IF viene valutato TRUE/FALSE a seconda del browser? Ovvio che NON ha senso, eppure da cosa capisco che effettivamente è così?

Se provo ad aggiungere


unset($_SESSION['ciao']);
if ($PAGINAID != 14 && $PAGINAID != 15) {
unset($_SESSION[DOMINIO]['news']);
$_SESSION['ciao'] = 'ciao';
}

mi ritrovo che SOLO su IE8 la variabile di sessione "ciao" viene settata.

Come mai? :help:

kk3z
24-03-2009, 15:43
I due codici che hai mostrato sono diversi, immagina che $PAGINAID sia null, nel primo caso l'if è true, nel secondo false. Probabilmente dipende da come ottieni $PAGINAID, magari explorer 8 interpreta le variabili che passi via GET in modo errato (non hai usato urlencode()?).

PS: ho appena scaricato IE8, e l'option selezionata viene mantenuta in una select richiesta da ajax.

anonimizzato
24-03-2009, 17:35
Ma i due codici diversi li ho messi proprio di esempio per vedere il caso dove funziona/non funziona.

Ok il concetto di $PAGINAID "NULL" che determina un diverso comportamento dell'IF (true/false), osservazione giusta, ma la domanda comunque è: perchè su tutti i browser va bene mentre IE8 no?

Considera comunque che quel blocco di codice in teoria è totalmente estraneo alla pagina php che genera l'html delle select richiamate in AJAX.

$PAGINAID inoltre non è una valore ottenuto da $_GET/$_POST/$_REQUEST ma un valore ottenuto da DB.

Il JS che richiama le select è del tipo:


$("#elemento").load('_sottocategoria.php?var=' + 87, 'cache:false');


L'unica cosa che viene passata alla pagina _sottocategoria.php è dunque l'ID della categoria e funziona correttamente perchè viene popolata la select corretta.

Se però provo a stampare a video con un print_r tutto ciò che c'è in sessione nella pagina sottocategoria.php MANCANO tutti quei valori necessari presenti invece nella pagina principale, pur essendo la stessa sessione.

La cosa assurda è che quella variabile di test $_SESSION['ciao'] = 'ciao', mi compare nella pagina sottocategoria.php nel momento in cui provo a richiamare la select dinamica.

Ma il blocco di codice in cui imposto $_SESSION['ciao'] = 'ciao' è nell'header.php e non in sottocategoria.php ...

:muro: