0

我可能在这里忽略了一些非常明显的东西。

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

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=falseURL 中就会出现丑陋的情况。

没关系,但是如果您重新加载页面并且确实再次启用了 cookie,我想重定向用户,因此它在 URL 中被剥离?cookies=false(允许该方法重新检查并了解现在启用了 cookie )。

4

2 回答 2

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 中,URL 已经有?cookies=false,但由于$cookiesEnabled是错误的,我们重定向到 add ?cookies=false,然后循环回到案例 3。

于 2010-03-15T05:52:03.573 回答
0

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

更新评论:

然后我真的建议在 s 中放入 print 语句,if这样你就可以看到你正在经历哪些以及各种值是什么。很明显,有些东西并没有按照你想象的方式设置,所以现在你需要找出它实际上是什么。

我多次遇到的一件事是代码本身没问题,但是有一个 .htaccess 文件对您不利,因此请仔细检查任何目录中的任何 .htaccess 文件,从 DOCUMENT_ROOT 开始。

于 2010-03-15T01:30:33.080 回答