为什么这个 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 是否已启用。我做到了这一点,但是如果没有饼干,就会出现丑陋的情况 ?cookies=false
在网址中。
没关系,但是如果您重新加载页面并再次启用 cookie,我想重定向用户,以便将其剥离 ?cookies=false
在 URL 中(允许该方法重新检查并了解 cookies 现在 是 已启用。)。
解决方案
后 $cookiesEnabled = ($testCookie === $random);
, ,有4种情况:
$cookiesEnabled
是真的并且$_GET['cookies'] === 'false'
是真的$cookiesEnabled
是真的并且$_GET['cookies'] === 'false'
是假的$cookiesEnabled
是假的并且$_GET['cookies'] === 'false'
是真的$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,看什么浏览器和服务器实际上是说给对方。上述投入一些记录代码中的片段也可能是指导性的。
<强>更新的评论:强>
然后我真的建议把在if
s内打印语句所以你可以看到你要去哪些通过什么不同的值。很明显的的东西的是没有得到你设置以为这会是这样,所以现在你需要找出它实际上是什么。
我也遇到过好几次的一件事是代码本身是好的,但也有是工作对你的.htaccess文件,所以要仔细检查所有的.htaccess文件中的任何一个目录里,由DOCUMENT_ROOT开始。