为什么此HTTP请求会不断循环?

时间:2010-03-15 01:23:37

标签: php session cookies kohana kohana-3

我可能忽略了一些非常明显的事情。

评论有助于解释任何特定于库的代码。

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,我想重定向用户,以便在URL中删除?cookies=false(允许方法重新检查并立即学习cookie 已启用。)。

2 个答案:

答案 0 :(得分:1)

$cookiesEnabled = ($testCookie === $random);之后,有4种情况:

  1. $cookiesEnabled为真,$_GET['cookies'] === 'false'为真
  2. $cookiesEnabled为真,$_GET['cookies'] === 'false'为假
  3. $cookiesEnabled为false且$_GET['cookies'] === 'false'为真
  4. $cookiesEnabled为false且$_GET['cookies'] === 'false'为false
  5. 案例1由第一个if块处理。 return语句旨在处理案例2和案例3;第二个if块仅用于处理案例4,但它同时捕获案例3和4.在案例3中,URL已经有?cookies=false,但由于$cookiesEnabled为false,我们重定向以添加?cookies=false,并循环回到案例3。

答案 1 :(得分:0)

你必须要留下一些东西,因为那里的 没有循环。如果您的意思是浏览器正在循环(例如获取连续重定向),那么我建议将Live HTTP Headers扩展名安装到Firefox并观察浏览器和服务器实际上彼此说的内容。在上面的代码段中添加一些日志记录代码也可能具有指导意义。

评论更新:

然后我真的建议在if内添加打印语句,这样你就可以看到你正在经历哪些以及各种值是什么。显然某些东西没有像你想象的那样被设置,所以现在你需要找出它实际上是什么。

我遇到的一件事是代码本身没问题,但是有一个.htaccess文件对你不利,所以请从DOCUMENT_ROOT开始仔细检查任何目录中的任何.htaccess文件。 / p>