Warum wird ständig looping diese HTTP-Anforderung?
Frage
Ich bin wahrscheinlich etwas wirklich offensichtlich hier mit Blick auf.
Die Kommentare sind in zu helfen, jede Bibliothek spezifischen Code zu erklären.
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;
}
Zum einen wollte ich eine einfache Möglichkeit zu überprüfen, ob Cookies aktiviert wurden. Ich erreichte dies, aber im Fall keine Cookies, gibt es eine hässliche ?cookies=false
in der URL.
Das war in Ordnung, aber dann, wenn Sie die Seite neu geladen und haben Cookies aktiviert wieder, ich wollte den Benutzer umleiten, so dass es ?cookies=false
in der URL abgezogen (ermöglicht das Verfahren, dass Cookies noch einmal zu überprüfen und lernen, jetzt ist aktiviert.).
Lösung
Nach $cookiesEnabled = ($testCookie === $random);
gibt es 4 Fälle:
-
$cookiesEnabled
wahr und$_GET['cookies'] === 'false'
ist wahr -
$cookiesEnabled
wahr und$_GET['cookies'] === 'false'
ist false -
$cookiesEnabled
ist falsch und$_GET['cookies'] === 'false'
ist wahr -
$cookiesEnabled
ist falsch und$_GET['cookies'] === 'false'
ist false
Fall 1 wird durch den ersten if
Block behandelt. Die return
Aussage sollte Griff Fälle 2 und 3; der zweite if
Block ist nur Fall 4, zu handhaben, aber es fängt beide Fall 3 und 4. Im Fall 3 die URL bereits ?cookies=false
hat, aber da $cookiesEnabled
falsch ist, leiten wir ?cookies=false
und Zyklus wieder in Fall 3 hinzuzufügen.
Andere Tipps
Sie müssen etwas aus verlassen, da es heißt keine Schleife in diesem Code. Wenn Sie, dass das bedeutete Browser ist Looping (zB kontinuierliche Umleitungen immer), dann empfehle ich die Installation der Live HTTP Headers Erweiterung Firefox und beobachten, was der Browser und Server sagen eigentlich miteinander. Putting in einigem Logging-Code im Code-Schnipsel oben könnte auch lehrreich sein.
Update für einen Kommentar:
Dann wirklich empfehle ich in den if
s in print-Anweisungen setzen, so können Sie sehen, welche Sie durchmachen und was die verschiedenen Werte sind. Offensichtlich etwas ist nicht die Art und Weise gesetzt bekommen haben Sie es wäre, so jetzt müssen Sie herausfinden, was es tatsächlich ist.
Eine Sache, die ich mehrmals begegnet ist, dass der Code selbst in Ordnung ist, aber es gibt eine .htaccess-Datei, die gegen Sie arbeitet, so überprüfen Sie gehen doppelt keine .htaccess-Dateien in einem der Verzeichnisse, von DOCUMENT_ROOT zu starten.