Question

Je suis probablement ici quelque chose de vraiment dominant évident.

Les commentaires sont pour aider à expliquer un code spécifique de la bibliothèque.

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;

    }

Tout d'abord, je voulais un moyen facile de vérifier si les cookies sont activés. J'ai réalisé, mais en cas de pas de cookies, il y avait un ?cookies=false laid dans l'URL.

C'était OK, mais si vous rechargé la page et fait activer les cookies de nouveau, je voulais rediriger l'utilisateur de sorte qu'il dépouilla de ?cookies=false dans l'URL (permettant la méthode de revérifier et d'apprendre que les cookies maintenant sont est activée.).

Était-ce utile?

La solution

Après $cookiesEnabled = ($testCookie === $random);, il y a 4 cas:

  1. $cookiesEnabled est vrai et $_GET['cookies'] === 'false' est vrai
  2. $cookiesEnabled est vrai et $_GET['cookies'] === 'false' est faux
  3. $cookiesEnabled est faux et $_GET['cookies'] === 'false' est vrai
  4. $cookiesEnabled est faux et $_GET['cookies'] === 'false' est false

Cas n ° 1 est traité par le premier bloc de if. La déclaration de return est destiné à traiter les cas 2 et 3; le deuxième bloc de if est destiné à gérer seul cas 4, mais il attrape les deux cas 3 et 4. Dans le cas 3, l'URL a déjà ?cookies=false, mais depuis $cookiesEnabled est faux, nous redirigeons ajouter ?cookies=false, et le cycle de nouveau dans le cas 3.

Autres conseils

Vous devez partirez quelque chose car il pas de boucle dans ce code. Si vous vouliez dire que le navigateur est mise en boucle (par exemple, se réoriente en continu), je vous recommande d'installer le en-têtes HTTP live extension à Firefox et regarder ce que le navigateur et le serveur sont en train de dire à l'autre. Mettre dans un code d'enregistrement dans l'extrait ci-dessus peut aussi être instructif.

Mise à jour pour commentaires:

Je recommande vraiment mettre dans les états d'impression à l'intérieur des ifs afin que vous puissiez voir ceux que vous traversez et ce que les différentes valeurs. Il est clair que quelque chose ne se définissent la façon dont vous pensiez que ce serait, alors maintenant vous avez besoin de savoir ce qu'il est en réalité.

Une chose que j'ai rencontré à plusieurs reprises que le code lui-même est OK, mais il y a un fichier .htaccess qui travaille contre vous, alors allez à double vérifier tous les fichiers .htaccess dans l'un des répertoires, à partir de DOCUMENT_ROOT.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top