2012-07-18 141 views
0

我想知道是否有人可以帮助我。php会话变量在表单提交页面之间丢失

如果我在页面details.php(代码如下),有一个表单提交按钮(除其他外)。

当表单的提交按钮被点击时,你被带到process_tenant.php。

问题是会话变量valid_user似乎没有与它一起出现。我在两页的开始处都有session_start(),会话变量是绝对设置的,并且从不会在details.php上覆盖.php

任何人都能告诉我为什么?

details.php

<?php 
session_start(); 

    $_SESSION['valid_user'] = 'admin'; 

    echo $_SESSION['valid_user'];  //This prints out admin 
?> 

<!DOCTYPE HTML> 
<html> 
<head> 
     ... 
    </head> 

    <body> 
     ... 

     <form action='process_tenant.php' method='POST'> 
      ... 
     </form> 
    </body> 
</html> 

process_tenant.php

<?php 
    session_start(); 

    if (isset($_SESSION['valid_user'])) 
    { 
     echo 'heya';   //This does not print 
    } 

    echo 'hi' . $_SESSION['valid_user']; //This just prints 'hi' 
?> 

... 
+0

您是否使用session_destroy()销毁了会话? – phphunger 2012-07-18 12:28:29

+0

不,无处。我想知道如果它可能是一个PHP配置问题?因为代码似乎没有任何问题。 – 2012-07-20 08:24:06

+0

修复了这个问题,谢谢。我没有破坏会话,但我用“” – 2012-07-20 11:37:04

回答

0

的config.php

<?php 
ob_start(); 
session_start(); 
$_SESSION['valid_user'] = admin; 
?> 

Details.php

<?php 
include('Config.php'); 
?> 

process_tenant.php

<?php 
include('Config.php'); 

if (isset($_SESSION['valid_user'])) 
{ 
    echo 'heya'; 
} 
echo 'hi' . $_SESSION['valid_user']; 
?> 
+0

谢谢,但添加ob_start()似乎没有区别。 – 2012-07-18 12:08:30

+0

我编辑了答案。请立即检查。 – Dhruvisha 2012-07-18 12:14:50

+0

这没有什么区别。它只是写在不同文件中的相同代码。 – 2012-07-18 12:16:10

-1

开始只有一次,即使用session_start()只有一次,从process_tenant.php取出,放然后我知道做一次。

+0

覆盖valid_user session_start()确实需要为每个PHP调用调用一次。由于他没有在process_tenant.php文件中包含details.php文件,所以他需要调用session_start()。 – davidethell 2012-07-18 11:46:26

+0

如果您在两个页面的顶部不包含session_start(),则会引发大量错误。你一定需要session_start()。 – 2012-07-18 12:09:21

0

在details.php中,admin值并不等于任何值。它需要是一个变量或一个字符串或某种有效类型,否则它将被取消设置。

试着改变你的代码如下:

$_SESSION['valid_user'] = 'admin'; 
+0

它实际上从数据库中获取值,但为简单起见,我只是放了= admin。但是,是的,我确实在我的问题中忘记了''。谢谢 – 2012-07-18 12:03:29