Pourquoi cette requête HTTP mise en boucle sans cesse?
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.).
La solution
Après $cookiesEnabled = ($testCookie === $random);
, il y a 4 cas:
-
$cookiesEnabled
est vrai et$_GET['cookies'] === 'false'
est vrai -
$cookiesEnabled
est vrai et$_GET['cookies'] === 'false'
est faux -
$cookiesEnabled
est faux et$_GET['cookies'] === 'false'
est vrai -
$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 if
s 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.