基于cookie的无限循环php重定向

时间:2014-09-04 22:18:55

标签: php redirect cookies

我正忙着编写注册页面。该页面有三个步骤,每个步骤都有自己的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;
}

谢谢。

3 个答案:

答案 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;
}