我可能忽略了一些非常明显的事情。
评论有助于解释任何特定于库的代码。
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 已启用。)。
答案 0 :(得分:1)
在$cookiesEnabled = ($testCookie === $random);
之后,有4种情况:
$cookiesEnabled
为真,$_GET['cookies'] === 'false'
为真$cookiesEnabled
为真,$_GET['cookies'] === 'false'
为假$cookiesEnabled
为false且$_GET['cookies'] === 'false'
为真$cookiesEnabled
为false且$_GET['cookies'] === 'false'
为false 案例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>