会话变量不会持久化

时间:2013-09-02 04:15:49

标签: php session

我想在我的应用程序中使用一些会话变量,但是,我无法让它们显示在我需要的页面上。

这是设置它们的代码(我也手动为它们分配了值,因此数据库拉不是问题所在):

if ($name != ""){
    $_SESSION['name'] = $name;
    $_SESSION['id'] = $user_id;
}

我使用session_start();启动该页面,就像我在将使用会话变量的所有页面上一样。

当我尝试在另一个页面上调用会话变量时,它们不再存在,即使这是指定值重定向到的页面。

这就是我试图调用会话变量的方式:

 $name = $_SESSION['name'];
 $user_id = $_SESSION['id'];

为什么会这样做?

编辑:为了帮助我包含该页面的其余代码。数据库连接部分工作正常,它们与我在其他地方使用的相同。

 <?php
 session_start();

 define('DB_SERVER', '<server>');
 define('DB_USER','<db>');
 define('DB_PASSWORD' , '<password>');
 define('DB_NAME' , '<db-name>');

 $conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or 
        die('There was a problem connecting to the database');

 $stmt = "Select User.user_id, User.name from User where User.username = '" .       
 $_POST["username"] . "' AND User.password = '" . $_POST["pwd"] . "';";

 if(!$result = $conn->query($stmt)){
die('there was an error retrieving the information');
 }

$row = $result->fetch_assoc();
$name = $row['name'];
$user_id = $row['user_id'];

$_SESSION["name"] = $name;
$_SESSION["id"] = $user_id;

if ($name != ""){

$conn->close();
?>
<script type="text/javascript">
<!--
window.location = "store.php"
//-->
</script>

<?php
}
else{
?>
<script type="text/javascript">
<!--
window.location = "register.php"
//-->
</script>
<?php
}
?>

3 个答案:

答案 0 :(得分:4)

只有两种可能性:

  1. 您没有在任何输出之前启动会话。
  2. $name已空或null
  3. 您必须执行以下操作进行调试:

    1. echo $name之前有条件。
    2. error_reporting(E_ALL);或结帐此问题:How to get useful error messages in PHP?

答案 1 :(得分:0)

作为一种调试技术,请尝试在您尝试调用它们的页面上设置会话值。例如,将它们设置在页面顶部,然后尝试将它们输出到页面下方的其他位置,看看是否有效。如果是这样,那么很明显,变量没有在前一页面上设置。

答案 2 :(得分:0)

在PHP中,您必须使用session_start()启动会话,然后才能使用会话变量。

并尝试调试,您​​的if条件是否满足。在您的情况下,如果您的if条件不满足,那么您的下面代码将无法执行。

$_SESSION['name'] = $name;
$_SESSION['id'] = $user_id;