この 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 が有効になっているかどうかを簡単に確認する方法が必要でした。これは達成できましたが、Cookie がない場合は、醜い問題が発生しました。 ?cookies=false
URLにあります。
それは問題ありませんでしたが、ページをリロードして Cookie を再び有効にした場合、ユーザーをリダイレクトしてクッキーを剥がしたかったのです。 ?cookies=false
URL 内 (メソッドが Cookie を再チェックして学習できるようになりました) は 有効になります。)。
解決
後 $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
が false の場合、リダイレクトして追加します ?cookies=false
, 、ケース 3 に戻ります。
他のヒント
あなたが何かを残しする必要があります
のそのコードではありませんループです。あなたがのが(例えば連続リダイレクトを取得)、ブラウザをループしていることを意味している場合、私は<のhref = "https://addons.mozilla.org/en-US/firefox/addon/をインストールすることをお勧め3829" のrel = 『nofollowをnoreferrer』>ブラウザとサーバが実際にお互いに何を言っているか見てFirefoxのにの拡張機能とライブのHTTPヘッダー。上記のスニペットでいくつかのロギングコードに置くことも有益かもしれません。のコメントの更新:の
あなたが通過つもりどれとさまざまな値が何であるかを見ることができるようにそして、私は本当にif
s内部にprint文を入れてお勧めします。明らかには、あなたがそれをだろうと思った道を設定取得されていないので、今はそれが実際にあるかを調べる必要があります。
一つは、コード自体はOKですが、あなたに対して働いている.htaccessファイルがあるので、DOCUMENT_ROOTから始まる、ディレクトリのいずれかで任意の.htaccessファイルをダブルチェックして行くことです。