¿Por qué esta petición HTTP un bucle continuamente?
Pregunta
Probablemente estoy pasando por alto algo muy obvio aquí.
Los comentarios están para ayudar a explicar en cualquier código específico de la 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;
}
En primer lugar, quería una manera fácil de comprobar si se han habilitado las cookies. He logrado esto, pero en el caso de no tener las cookies, se produjo un ?cookies=false
fea en la URL.
que estaba bien, pero si luego recargado la página y no tienen las cookies habilitadas de nuevo, quería redirigir al usuario por lo que se despojó de ?cookies=false
en la dirección URL (que permite el método para volver a comprobar y aprender que las cookies ahora son activado.).
Solución
Después de $cookiesEnabled = ($testCookie === $random);
, hay 4 casos:
-
$cookiesEnabled
es verdadera y$_GET['cookies'] === 'false'
es cierto -
$cookiesEnabled
es verdadera y falsa$_GET['cookies'] === 'false'
es -
$cookiesEnabled
es falsa y$_GET['cookies'] === 'false'
es cierto -
$cookiesEnabled
es falsa y$_GET['cookies'] === 'false'
es false
Caso 1 es manejado por el primer bloque if
. La declaración return
está pensado para gestionar los casos 2 y 3; el segundo bloque if
está pensado para gestionar único caso 4, pero que las capturas tanto en el caso 3 y 4. En el caso 3, la URL ya ha ?cookies=false
, pero desde $cookiesEnabled
es falsa, redirigir añadir ?cookies=false
, y el ciclo de nuevo en el caso 3.
Otros consejos
Debe estar dejando algo fuera ya que es ningún bucle en dicho código. Si nos referimos que el navegador es un bucle (por ejemplo, conseguir redirecciones continuas), entonces te recomiendo instalar el Live HTTP Headers extensión de Firefox y ver lo que el navegador y el servidor realmente están diciendo el uno al otro. Poner en algún código de registro en el fragmento anterior también podría ser instructivo.
Actualizar para hacer comentarios:
A continuación Realmente recomiendo poner en los estados de impresión dentro de los if
s para que pueda ver cuáles le está pasando y lo que los distintos valores. Claramente algo no es conseguir crear la forma en que pensaba que sería, por lo que ahora tiene que averiguar lo que realmente es.
Una cosa que he encontrado varias veces es que el código en sí está bien, pero no es un archivo .htaccess que está trabajando en contra de usted, así que ve doble Vea cualquier archivo .htaccess en cualquiera de los directorios, a partir de DOCUMENT_ROOT.