2014-09-04 28 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; 
}