Почему этот HTTP-запрос постоянно зацикливается? - PullRequest
0 голосов
/ 15 марта 2010

Я, наверное, упускаю из виду нечто действительно очевидное.

Комментарии служат для объяснения любого конкретного библиотечного кода.

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. Я добился этого, но в случае отсутствия файлов cookie в URL-адресе имелось уродливое ?cookies=false.

Это было нормально, но если вы перезагрузили страницу и снова включили файлы cookie, я хотел перенаправить пользователя, чтобы он удалил ?cookies=false в URL (что позволяет методу перепроверить и узнать, что файлы cookie теперь включены .).

Ответы [ 2 ]

1 голос
/ 15 марта 2010

После $cookiesEnabled = ($testCookie === $random);, есть 4 случая:

  1. $cookiesEnabled верно и $_GET['cookies'] === 'false' верно
  2. $cookiesEnabled верно и $_GET['cookies'] === 'false' ложно
  3. $cookiesEnabled ложно и $_GET['cookies'] === 'false' верно
  4. $cookiesEnabled ложно и $_GET['cookies'] === 'false' ложно

Случай 1 обрабатывается первым блоком if. Оператор return предназначен для обработки случаев 2 и 3; второй блок if предназначен для обработки только случая 4, но он обрабатывает оба случая 3 и 4. В случае 3 URL уже имеет ?cookies=false, но, поскольку $cookiesEnabled имеет значение false, мы перенаправляем на добавление ?cookies=false и вернитесь к делу 3.

0 голосов
/ 15 марта 2010

Вы, должно быть, что-то упускаете, поскольку в этом коде нет цикла. Если вы имели в виду, что браузер зацикливается (например, получает непрерывные перенаправления), то я рекомендую установить расширение Live HTTP Headers для Firefox и посмотреть, что браузер и сервер фактически говорят каждому Другой. Ввод кода регистрации в приведенный выше фрагмент кода также может быть полезным.

Обновление для комментария:

Тогда я действительно рекомендую помещать операторы print внутри if s, чтобы вы могли видеть, через какие вы проходите и каковы различные значения. Очевидно, что что-то не устанавливается так, как вы думали, поэтому теперь вам нужно выяснить, что это на самом деле.

Одна вещь, с которой я сталкивался несколько раз, это то, что сам код в порядке, но есть файл .htaccess, который работает против вас, поэтому дважды проверьте все файлы .htaccess в любой из каталогов, начиная с DOCUMENT_ROOT.

...