Perché questa richiesta HTTP continuamente in loop?
Domanda
Probabilmente sto affaccia qualcosa di davvero evidente qui.
I commenti sono in per aiutare a spiegare qualsiasi codice specifico biblioteca.
public function areCookiesEnabled() {
$random = 'cx67ds';
// set cookie
cookie::set('test_cookie', $random);
// try and get cookie, if not set to false
$testCookie = cookie::get('test_cookie', false);
$cookiesAppend = '?cookies=false';
// were we able to get the cookie equal ?
$cookiesEnabled = ($testCookie === $random);
// if $_GET['cookies'] === false , etc try and remove $_GET portion
if ($this->input->get('cookies', false) === 'false' AND $cookiesEnabled) {
url::redirect(str_replace($cookiesAppend, '', url::current())); // redirect
return false;
}
// all else fails, add a $_GET[]
if ( ! $cookiesEnabled) {
url::redirect(url::current().$cookiesAppend);
}
return $cookiesEnabled;
}
In primo luogo, ho voluto un modo semplice per verificare se i cookie sono stati attivati. Ho raggiunto questo, ma in caso di nessun cookie, c'era un brutto ?cookies=false
nell'URL.
E 'stato OK, ma poi se si ricarica la pagina e ha fatto attivare i cookie di nuovo, ho voluto reindirizzare l'utente in modo che tolse ?cookies=false
nella URL (che consente il metodo per ricontrollare e imparare che i cookie ora sono abilitato.).
Soluzione
Dopo $cookiesEnabled = ($testCookie === $random);
, ci sono 4 casi:
-
$cookiesEnabled
è vero e$_GET['cookies'] === 'false'
è vero -
$cookiesEnabled
è vero e$_GET['cookies'] === 'false'
è falsa -
$cookiesEnabled
è falso e$_GET['cookies'] === 'false'
è vero -
$cookiesEnabled
è falso e$_GET['cookies'] === 'false'
è false
Caso 1 è gestito dal primo blocco if
. La dichiarazione return
ha lo scopo di gestire i casi 2 e 3; il secondo blocco if
destinato a gestire solo caso 4, ma cattura sia il caso 3 e 4. Nel caso 3, l'URL già ha ?cookies=false
, ma poiché $cookiesEnabled
è falso, si reindirizzare aggiungere ?cookies=false
, e il ciclo di nuovo nel caso 3.
Altri suggerimenti
Devi essere lasciando fuori qualcosa dal momento che ci è alcun ciclo in quel codice. Se si intende che il Browser è un loop (ad esempio, ricevendo continue redirect), allora vi consiglio di installare il intestazioni HTTP live estensione a Firefox e guardare ciò che il browser e il server sono in realtà da dire gli uni agli altri. Mettere in un certo codice di registrazione nel frammento di cui sopra potrebbe anche essere istruttivo.
Aggiornamento per un commento:
Poi vi consiglio davvero mettendo in istruzioni di stampa all'interno dei if
s modo da poter vedere che quelli che si sta attraversando e che cosa i vari valori. Chiaramente qualcosa non è sempre impostato il modo in cui si pensava che sarebbe stato, in modo da ora è necessario scoprire che cosa sia in realtà.
Una cosa che ho incontrato più volte è che il codice stesso è OK, ma c'è un file .htaccess che sta lavorando contro di voi, in modo da andare doppio controllo tutti i file .htaccess in ognuna delle directory, a partire da DOCUMENT_ROOT.