2012-02-20 31 views
2

工作1:我使用register.php註冊客戶,重定向不與報頭(位置)和會話變量

2:從表格所收集的數據被髮送到1.PHP,它被保存在數據庫

3:後形式的數據保存在數據庫中,1.PHP轉發所選表格數據(myvalue的)到register.php myvalue的=「ABC」

在1.PHP

,我保存會話變量像這樣

@session_start(); 
$_SESSION['color']='blue'; 

register.php的代碼是

if (isset($_SESSION['color'])) { 
      header('Location: http://mydomain.com/thankyou.php'); 
    } 
else { 


@session_start(); 
some other stuff that was initially use for signing up the clients 

我的邏輯是檢查會話變量,並將其重定向到一些-其他頁

當步驟1,步驟2和步驟3是完整的,頁面應當 重定向到thankyou.php

目前

,當步驟1,步驟2,步驟3完成後,而不是打開thankyou.php,在下頁被打開

http://mydomain.com/register.php?myValue='abc' 

不過,如果我重新打開register.php或返回到第一步(打開register.php),顯示thankyou.php ...

有人能指導我在哪裏,我在做的錯誤?爲什麼重定向不成功,儘管會話變量正在創建?

代碼更新

我嘗試下面的代碼在我的register.php頂部

@session_start(); 


    if (isset($_SESSION['color'])) { 
      header('Location:http://mydomain.com/thankyou.php'); 
      exit; 
    } 
else{ 
remaining stuff 

偶爾做的伎倆,重定向頁面,而有時(更大數量),它在重定向到thankyou.php失敗,也代碼需要刪除完整的歷史記錄和緩存工作(在這樣做後,仍然錯過點擊發生..)

+0

inserte會話開始,但仍然是相同的行爲 – 2012-02-20 18:47:03

+1

仍然打開「register.php myvalue的=?」 ABC「」雖然我校正的會話開始,並加入出口(0);標題重定向後 – 2012-02-20 19:09:53

+0

我們將需要查看所有涉及的代碼進行故障排除。 – AlexC 2012-02-20 21:57:45

回答

3

在您的register.php,你不能測試會話變量您發出的session_start之前,所以你的代碼應該更像:

session_start(); 
if (isset($_SESSION['color'])) { 
      header('Location: http://mydomain.com/thankyou.php'); 
    } 
else { 
// Something else.... 

編輯:

另一件事我當試圖設置會話變量與重定向一起使用時,發現它很有用,只有在運行函數後才能進行重定向。下面是它如何工作:

$throwAwayVariable = setColor('blue'); 
if($throwAwayVariable){ // separated out into a function so it wouldn't redirect before the session variable was saved 
    session_write_close(); 
    header("Location: http://mydomain.com/thankyou.php"); 
} 

function setColor($color){ 
    @session_start(); 
    $_SESSION['color']='blue'; 
    return true; 
} 

由於並非所有代碼都已經發布,你就必須找出在這去,但我一直有我的會話這個過程之後瓦爾工作。

+1

試過這個,但不工作 – 2012-02-20 19:13:36

+1

@NewBee,請看我的編輯。這個過程從來沒有讓我獲得重定向來尊重我在前一頁設置的會話變量。如果沒有,請回我。 – AlexC 2012-02-20 19:52:02

+1

感謝人......非常感謝..看我的編輯也 – 2012-02-20 20:53:58

2

您的session_start()調用re gister.php需要在你調用任何$_SESSION變量之前。

+1

已經改變了它 – 2012-02-20 19:14:03

3

確保您使用exit(0);在你做一個標題重定向之後,否則php仍然會解析並運行腳本的其餘部分,有時它會導致一些有趣的行爲。

+1

嘗試過但不工作 – 2012-02-20 19:13:44

0

我有同樣的問題,然後我嘗試添加session_startsession_write_close,它的工作原理!在

session_start(); 
$_SESSION['status'] = 'Updated Poem successfully'; 
session_write_close(); 
header("location: index.php");