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

注释是为了帮助解释任何库特定的代码。

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 是否已启用。我做到了这一点,但是如果没有饼干,就会出现丑陋的情况 ?cookies=false 在网址中。

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

有帮助吗?

解决方案

$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 block 旨在仅处理情况 4,但它捕获情况 3 和 4。在情况 3 中,URL 已经有 ?cookies=false, , 但是由于 $cookiesEnabled 为 false,我们重定向添加 ?cookies=false, ,然后循环回到情况 3。

其他提示

您必须留下一些东西,因为那里的的在代码中没有循环。如果您意味着的浏览器的是循环(如获得连续重定向),那么我建议安装的直播HTTP头扩展的Firefox,看什么浏览器和服务器实际上是说给对方。上述投入一些记录代码中的片段也可能是指导性的。

<强>更新的评论:

然后我真的建议把在ifs内打印语句所以你可以看到你要去哪些通过什么不同的值。很明显的的东西的是没有得到你设置以为这会是这样,所以现在你需要找出它实际上是什么。

我也遇到过好几次的一件事是代码本身是好的,但也有是工作对你的.htaccess文件,所以要仔细检查所有的.htaccess文件中的任何一个目录里,由DOCUMENT_ROOT开始。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top