Joomla Session-> isActive () e il reindirizzamento del timeout della sessione non funzionano


9

Sto cercando di reindirizzare il mio sito Web alla homepage quando la sessione scade e l'utente viene disconnesso automaticamente (in questo momento viene reindirizzato alla pagina di registrazione principale di joomla, che non voglio che l'utente veda perché ho creato il mio pagina di registrazione in un componente personalizzato).

Nel file index.php del mio modello, controllo se la sessione è attiva ed eseguo un reindirizzamento se la sessione è scaduta:

$session = JFactory::getSession();

if (!$session->isActive()) {
   echo "session is expired";   
   header('Location: http://www.example.com/');
   exit;
 }else{
   echo "session is active";
 }

Questa soluzione ha funzionato bene fino al momento in cui ho aggiornato a Joomla 3.4.5. Dopo l'aggiornamento, anche quando l'utente viene disconnesso automaticamente, si comporta come se la sessione fosse ancora attiva (controllo che attraverso la riga "session is active" dell'eco, come puoi vedere sopra).

Perché la sessione è ancora attiva anche se l'utente è disconnesso? Esiste un'alternativa al metodo $ session-> isActive ()?

Risposte:


7

Se guardi il file session.php, vedi quanto segue:

public function isActive()
{
    return (bool) ($this->_state == 'active');
}

Qual è la funzione che stai chiamando. Non sono sicuro se questo sia stato fatto di proposito o se fosse stato un errore, ma tornerà sempre 1.

Invece, usi:

$session = JFactory::getSession();
echo $session->getState();

Che restituirà uno se il seguente:

  • non attivo
  • attivo
  • scaduto
  • distrutto
  • errore

È quindi possibile basare la propria ifaffermazione su questo, ad esempio:

$session = JFactory::getSession();

if ($session->getState() !== 'active') 
{
    echo 'session is not active';   
    header('Location: http://www.example.com/');
    exit;
}
else
{
    echo 'session is active';
}

In una nota a margine, suggerirei di utilizzare il JFactory::getApplication()->redirect()metodo Joomla invece diheader()

Spero che sia di aiuto


Grazie mille !! Questo e 'esattamente quello che stavo cercando. Ha funzionato perfettamente! Grazie ancora ! :)
user3716433

@ user3716433 - Prego. Contrassegna la risposta come accettata facendo clic sull'icona "tick"
Lodder

return (bool) ($ this -> _ state == 'active'); non restituirà sempre 1, restituisce "true" se $ this -> _ state è "attivo", altrimenti restituisce false. Non vedo perché il tuo codice funziona e il codice iniziale no !? Solo curioso ... $ session-> getState ()! == 'active' produce gli stessi risultati come! $ Session-> isActive ()
fruppel

@fruppel - Ho appena testato questa funzione su un sito Joomla 3.4.5 e ritorna sempre 1, anche se dovrebbe restituire un valore booleano
Lodder

Ok grazie lo controllerò anch'io. Forse è un bug
fruppel l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.