2010-03-15 110 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