Por que essa solicitação HTTP está continuamente loop?
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.).
Solução
Depois $cookiesEnabled = ($testCookie === $random);
, existem 4 casos:
$cookiesEnabled
é verdadeiro e$_GET['cookies'] === 'false'
é verdade$cookiesEnabled
é verdadeiro e$_GET['cookies'] === 'false'
é falso$cookiesEnabled
é falso e$_GET['cookies'] === 'false'
é verdade$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 if
S 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.