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.
Anch'io l'ho vissuto una volta. È semplicemente orribile se non ti aspetti un comportamento così strano. – Gumbo
@Foo grazie fratello! Hai salvato le mie 5 ore. Molte grazie. –
Ho appena effettuato l'accesso per fare +1 su entrambe le domande e le risposte. Mi stava facendo impazzire. –