Почему этот HTTP-запрос постоянно зацикливается?
Вопрос
Вероятно, я упускаю из виду здесь что-то действительно очевидное.
Комментарии приведены для того, чтобы помочь объяснить любой специфичный для библиотеки код.
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;
}
Во-первых, мне нужен был простой способ проверить, включены ли файлы cookie.Я добился этого, но в случае отсутствия печенья возникал уродливый ?cookies=false
в URL-адресе.
Это было нормально, но затем, если вы перезагрузили страницу и снова включили cookies, я хотел перенаправить пользователя, чтобы он удалился ?cookies=false
в URL-адресе (позволяя методу перепроверить и узнать, что cookies теперь являются включен.).
Решение
После $cookiesEnabled = ($testCookie === $random);
, есть 4 случая:
$cookiesEnabled
является истинным и$_GET['cookies'] === 'false'
это правда$cookiesEnabled
является истинным и$_GET['cookies'] === 'false'
является ложным$cookiesEnabled
является ложным и$_GET['cookies'] === 'false'
это правда$cookiesEnabled
является ложным и$_GET['cookies'] === 'false'
является ложным
Случай 1 обрабатывается первым if
блок.В return
заявление предназначено для рассмотрения случаев 2 и 3;второй if
блок предназначен для обработки только случая 4, но он улавливает оба случая 3 и 4.В случае 3 URL-адрес уже имеет ?cookies=false
, но с тех пор , как $cookiesEnabled
является ложным, мы перенаправляем на add ?cookies=false
, и вернитесь к случаю 3.
Другие советы
Вы, должно быть, что-то упускаете, так как там является в этом коде нет цикла.Если вы имели в виду, что браузер является зацикливанием (например,получение непрерывных перенаправлений), затем я рекомендую установить Живые HTTP-Заголовки расширение для Firefox и посмотрите, что браузер и сервер на самом деле говорят друг другу.Включение некоторого кода ведения журнала в приведенный выше фрагмент также может быть поучительным.
Обновление для комментариев:
Тогда я действительно рекомендую помещать инструкции для печати внутри if
s таким образом, вы можете видеть, через какие из них вы проходите и каковы различные значения.Ясно что - то настраивается не так, как вы предполагали, так что теперь вам нужно выяснить, что это такое на самом деле.
Одна вещь, с которой я сталкивался несколько раз, заключается в том, что сам код в порядке, но есть файл .htaccess, который работает против вас, поэтому дважды проверьте все файлы .htaccess в любом из каталогов, начиная с DOCUMENT_ROOT.