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

¿Fue útil?

Solución

Después de $cookiesEnabled = ($testCookie === $random);, hay 4 casos:

  1. $cookiesEnabled es verdadera y $_GET['cookies'] === 'false' es cierto
  2. $cookiesEnabled es verdadera y falsa $_GET['cookies'] === 'false' es
  3. $cookiesEnabled es falsa y $_GET['cookies'] === 'false' es cierto
  4. $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 ifs 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top