我正忙着编写注册页面。该页面有三个步骤,每个步骤都有自己的cookie值。我想做的是检查cookie值并在访问网站时将用户转移到正确的页面
实施例: 如果$ _COOKIE ['step']的值是'step_two',它应该重定向到:www.domain.com/register.php?step = your_details。如果cookie未设置,则不应重定向并保留在register.php页面上。
重定向工作正常,但它会进入无限循环。因为我现在已经醒了差不多24小时了,所以我真的不敢想清楚了。因此,如果有人能把我推向正确的方向,我将不胜感激。
一段代码:
$cookie_value = 'step_2';
setcookie("step",$cookie_value, time()+3600*24);
$cookie_not_set = true;
$cookie_step_two = false;
if (isset($_COOKIE['step'])) {
if ($_COOKIE['step'] == 'step_2') {
$cookie_not_set = false;
$cookie_step_two = true;
header('Location: ?step=your_details');
exit();
}
} else {
$cookie_not_set = true;
}
谢谢。
答案 0 :(得分:2)
你实际上没有设置你的cookie值,所以它不会改变。这就是你有无限循环的原因。
$_GET
和$_COOKIE
彼此无关。看起来你想要:
if ($_GET['step'] === 'your_details')`
......无论如何都比使用cookie更好。
答案 1 :(得分:0)
您将不断输入if
条件,因为您的Cookie数据没有其他操作。
如果您的Cookie设置为" step_2"你将进入循环。没有任何更改,因此刷新页面。您将重新输入step_2条件并进入重定向。
我还假设你明白你的$_GET
& $_COOKIE
请求完全不同。如果没有,请参阅@Brads回答
停止此无限循环的解决方案是:
if (isset($_COOKIE['step'])) {
if ($_COOKIE['step'] == 'step_2') {
$cookie_not_set = false;
$cookie_step_two = true;
$_COOKIE['step'] = 'step_3';
header('Location: ?step=your_details');
exit();
}
但请注意,您的真/假验证/更改是本地更改,并且在页面刷新时不是绝对的
答案 2 :(得分:0)
我相信您的问题是重定向不会更改您的Cookie,因此如果Cookie设置为step_2,您需要查看传递的GET变量;
$cookie_not_set = true;
$cookie_step_two = false;
if (isset($_COOKIE['step'])) {
if ($_COOKIE['step'] == 'step_2') {
if( !empty($_GET['step']) && $_GET['step'] == 'your_details' )
{
... you have redirected and now can continue ...
}
else
{
// redirect and set the get var to signal to this script.
$cookie_not_set = false;
$cookie_step_two = true;
header('Location: ?step=your_details');
exit();
}
}
} else {
$cookie_not_set = true;
}