2010-03-19 15 views
5

Ho cercato di eseguire il debug di questo problema per molte ore, ma senza successo. Utilizzo PHP da molti anni e ci sono tornato dopo una lunga interruzione, quindi sono ancora un po 'arrugginito.Variabile di sessione basata su PHP che non mantiene il valore. Funziona su localhost, ma non sul server

In ogni caso, i miei $ _SESSION vars non mantengono il loro valore per qualche motivo che non riesco a capire. Il sito funzionava perfettamente su localhost, ma caricarlo sul server sembrava interromperlo.

Per prima cosa ho controllato le impostazioni del server PHP.ini. Tutto sembra a posto. In effetti, il mio sistema di login è basato sulla sessione e funziona perfettamente. Quindi ora che so $ _SESSIONS funzionano correttamente e conservando il loro valore per il mio login, presumo che il server sia configurato e che il problema sia nel mio script.

Ecco una versione ridotta del codice che causa un problema. $ tipo, $ ordine e $ stile non vengono mantenuti dopo che sono stati impostati tramite una variabile GET. L'utente fa clic su un collegamento che imposta una variabile tramite GET e questa variabile viene conservata per il resto della sessione.

C'è qualche problema con la mia logica che non vedo?

<?php 
require_once('includes/top.php'); //first line includes a call to session_start(); 
require_once('includes/db.php'); 

$type = filter_input(INPUT_GET, 't', FILTER_VALIDATE_INT); 
$order = filter_input(INPUT_GET, 'o', FILTER_VALIDATE_INT); 
$style = filter_input(INPUT_GET, 's', FILTER_VALIDATE_INT); 

/* 
According to documentation, filter_input returns a NULL when variables 
are undefined. So, if t, o, or s are not set via URL, $type, $order and $style 
will be NULL. 
*/  

print_r($_SESSION); 
/* 
All other sessions, such as the login session, etc. are displayed here. After 
the sessions are set below, they are displayed up here to... simply with no value. 
This leads me to believe the problem is with the code below, perhaps? 
*/ 


// If $type is not null (meaning it WAS set via the get method above) 
// or it's false because the validation failed for some reason, 
// then set the session to the $type. I removed the false check for simplicity. 
// This code is being successfully executed, and the data is being stored... 
if(!is_null($type)) 
{ 
    $_SESSION['type'] = $type; 
} 
if(!is_null($order)) 
{ 
    $_SESSION['order'] = $order; 
} 
if(!is_null($style)) 
{ 
    $_SESSION['style'] = $style; 
} 


$smarty->display($template); 

?> 

Se qualcuno può indicarmi la giusta direzione, lo apprezzerei molto. Grazie.

risposta

7

Incredibile!

Dopo tre ore di debugging, ho capito il problema

HostGator, la mia non-più-amato padrone di casa, corre la loro impostazione predefinita ini con register_globals ON

Non ci posso credere Questo.

Quindi le mie variabili di $ tipo venivano sovrascritte con $ _SESSION ["tipo"] e venivano trattate come le stesse. Quindi è stato un problema del server a causare il problema, non la mia codifica. È bello saperlo, ma voglio che le mie 5 ore mi tirino indietro i capelli.

Spero che questo aiuti qualcuno in fondo alla strada il cui utilizzo di HostGator è confuso da morire.

+0

Anch'io l'ho vissuto una volta. È semplicemente orribile se non ti aspetti un comportamento così strano. – Gumbo

+0

@Foo grazie fratello! Hai salvato le mie 5 ore. Molte grazie. –

+0

Ho appena effettuato l'accesso per fare +1 su entrambe le domande e le risposte. Mi stava facendo impazzire. –

1

È necessario chiamare la funzione session_start(). Prima di accedere alla variabile $_SESSION.

allora manterrà tutte le variabili di sessione per voi ..

+0

Il session_start() viene chiamato nel primo file richiesto/incluso, nella parte superiore. Altre variabili basate sulla sessione funzionano, quindi la sessione viene creata e inizia perfettamente. – Foo

0

Penso che lei ha sottolineato che avete fatto una chiamata a session_start() in alto a destra top.php? E un'altra cosa che noto è che stai convalidando i campi Integer attraverso il filtro PHP. Assicurati che siano valori interi o che tu debba finire con valori null. Esegui un test per verificare se i valori TYPE, ORDER e STYLE sono impostati prima della convalida. Tieni presente che, utilizzando il filtro php, è necessario convalidare un determinato tipo e non archiviare. Non penso che $ tipo memorizzerebbe i tuoi dati, sarebbe piuttosto un controllo booleano. Prova ad assegnare le variabili $ _GET [] alle VARIABILI SESSIONE. Spero che questo ti aiuti.

+0

Grazie per i suggerimenti. L'ho provato, tutte le variabili sono state impostate. Infatti, $ _SESSION ['type'] o qualunque cosa sia stata impostata usando il mio codice. Non sta mantenendo il valore mentre continui a navigare nel sito. Non c'è altro posto che lo disinserisce o lo sovrascrive. – Foo

Problemi correlati