2012-02-20 61 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");