Pergunta

Provavelmente estou negligenciando algo realmente óbvio aqui.

Os comentários estão para ajudar a explicar qualquer código específico da 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;

    }

Em primeiro lugar, eu queria uma maneira fácil de verificar se os cookies estavam ativados. Eu consegui isso, mas no caso de sem biscoitos, havia um feio ?cookies=false no URL.

Tudo bem, mas se você recarregou a página e tivesse cookies ativados novamente, eu queria redirecionar o usuário para que ele despojasse ?cookies=false no URL (permitindo que o método se retire e aprenda que os cookies agora são ativado.).

Foi útil?

Solução

Depois $cookiesEnabled = ($testCookie === $random);, existem 4 casos:

  1. $cookiesEnabled é verdadeiro e $_GET['cookies'] === 'false' é verdade
  2. $cookiesEnabled é verdadeiro e $_GET['cookies'] === 'false' é falso
  3. $cookiesEnabled é falso e $_GET['cookies'] === 'false' é verdade
  4. $cookiesEnabled é falso e $_GET['cookies'] === 'false' é falso

O caso 1 é tratado pelo primeiro if quadra. o return A declaração destina -se a lidar com os casos 2 e 3; o segundo if Block tem como objetivo lidar com apenas o caso 4, mas captura o caso 3 e 4. no caso 3, o URL já tem ?cookies=false, mas desde $cookiesEnabled é falso, redirecionamos para adicionar ?cookies=false, e volte ao caso 3.

Outras dicas

Você deve estar deixando algo de fora desde que lá é Nenhum loop nesse código. Se você quis dizer que o navegador está em loop (por exemplo, obtendo redirecionamentos contínuos), então eu recomendo a instalação do Cabeçalhos HTTP vivos Extensão ao Firefox e observe o que o navegador e o servidor estão realmente dizendo um ao outro. Colocar algum código de log no snippet acima também pode ser instrutivo.

Atualização para comentar:

Então eu realmente recomendo colocar declarações impressas dentro do ifS para que você possa ver por quais está passando e quais são os vários valores. Claramente algo Não está sendo definido da maneira que você pensou que seria, então agora você precisa descobrir o que realmente é.

Uma coisa que encontrei várias vezes é que o código em si está OK, mas existe um arquivo .htaccess que está funcionando contra você, então verifique os arquivos .htaccess em qualquer um dos diretórios, começando em Document_root.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top