2014-09-04 123 views
0

我目前忙于编写注册页面。该页面有三个步骤,每一步都有自己的cookie值。我想要做的是检查cookie值,并在访问网站时将用户转移到正确的页面基于cookie的无限循环php重定向

例如: 如果$ _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; 
} 

谢谢。

+1

如果你已经24小时了,我真的建议小睡一会。它会帮助你的代码,并且可能是你现在最好的投资。 – Brad 2014-09-04 22:20:45

+0

1)您的'header'调用无效,因为您错过了一个结束语'''2)。由于您不会修改'$ _COOKIE'值,因此如果它设置为* step_2 *,您将不断处于重定向循环中,如果条件不变,您将不断输入此值。 Piror发布标题。为什么不修改'$ _COOKIE ['step'] ='step_3'' – 2014-09-04 22:22:12

+0

@Brad我会这样做后,我会。我不能停下来,如果有事情没有按照它的方式工作。我的人格。 – user3723069 2014-09-04 22:22:18

回答

2

你实际上没有设置你的cookie值,所以它不会改变。这就是为什么你有一个无限循环。

$_GET$_COOKIE没有任何关系。它看起来像你想要的:

if ($_GET['step'] === 'your_details')` 

...这将比反正使用cookie更好。

+0

我在设置cookie值,但我忘了将它添加到我的问题中。我刚刚编辑了我的问题并添加了cookie的价值。 – user3723069 2014-09-04 22:23:41

+1

@ user3723069您将Cookie值设置为一遍又一遍 – Brad 2014-09-04 22:24:11

+0

我设置cookie的原因是,用户被重定向到他们离开网站的步骤 - 如果Cookie已经组。当用户点击“下一步”(即步骤3)时,cookie值应该更改为step_3。 – user3723069 2014-09-04 22:29:45

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(); 
    } 

但也注意到,你真/假验证/修改是本地的变化并不会绝对页面刷新

0

我相信你的问题是重定向不会改变你的cookie,所以你需要看看GET var你重新传递,如果cookie设置为step_2这样;

$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; 
}