2010-03-15 107 views
0

我可能在這裏忽略了一些非常明顯的東西。爲什麼這個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的情況下,URL中有一個醜陋的?cookies=false

這是確定的,但這時如果重新加載頁面,的確有餅乾再次啓用,我想將用戶重定向所以它在URL中剝離?cookies=false(允許該方法重新檢查和學習餅乾現在啓用)。

回答

1

$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,網址已經?cookies=false,但由於$cookiesEnabled是假的,我們重定向到添加?cookies=false,並循環回的情況下3。

0

您必須留下一些東西,因爲有在代碼中沒有循環。如果你的意思是,瀏覽器是循環(例如獲得連續重定向),那麼我建議安裝Live HTTP Headers擴展的Firefox,看什麼瀏覽器和服務器實際上是說給對方。在上面的代碼片段中加入一些日誌代碼可能也很有啓發性。

更新評論:

當時我真的建議把在if S的內部報表打印,所以你可以看到你要去哪些通過什麼不同的值。顯然東西沒有按照你認爲的那樣設置,所以現在你需要找出它的實際內容。

我多次遇到的一件事是代碼本身是可以的,但有一個.htaccess文件對您有用,所以請從任何目錄中仔細檢查任何.htaccess文件,從DOCUMENT_ROOT開始。

+0

對不起,這就是我的意思。我有Live HTTP Headers,但我不確定我應該改變以停止。它似乎在請求,並且每一次都被重新定向(當cookies被禁用時)。 – alex 2010-03-15 01:32:59