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.).

War es hilfreich?

Lösung

Nach $cookiesEnabled = ($testCookie === $random); gibt es 4 Fälle:

  1. $cookiesEnabled wahr und $_GET['cookies'] === 'false' ist wahr
  2. $cookiesEnabled wahr und $_GET['cookies'] === 'false' ist false
  3. $cookiesEnabled ist falsch und $_GET['cookies'] === 'false' ist wahr
  4. $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 ifs 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top