PHP会话变量在脚本中途被丢弃

时间:2012-08-24 06:35:52

标签: php session session-variables

我正在尝试在我的一个脚本中保存会话变量,它似乎对脚本的一部分工作正常,但是,它会在我的代码的第二部分中被删除。我已经回应了每一条线,无法弄清楚为什么会发生这种情况。此外,此代码之前工作正常,但自从我切换服务器后,它似乎出现故障。我不认为它是会话保存路径,因为代码的第一部分工作正常。这是我的代码的基本外部结构(我删除了所有不相关的部分以节省空间):

<!--raw-->
<?php 

session_start(); 
include 'config.php'; 

?>
<html>
<body>

<form id="driver_record" method="post" action="<?php echo htmlentities($PHP_SELF); ?>">
Enter Driver Number: <input type="text" name="driver" />
<input type="submit" value="Submit" name="user_submit" />
</form>

<?php

if(isset($_POST['user_submit']))
{
if(username_exists($_POST['driver'])){

$ulog = $_POST['driver'];
$_SESSION['user_id'] = $ulog;
echo $_SESSION['user_id']; //Session echos fine here
$tablename_cc = "cc_".$ulog;
$tablename_db = "db_".$ulog;
$tablename_misc = "misc_".$ulog;
$tablename_cash = "cash_".$ulog;

?>

<form id="expenses_update" method="post" action="<?php echo htmlentities($PHP_SELF); ?>">
<input type="submit" value="Approve" name="record_approve" />

<?php
}
}
?>

<?php

    if(isset($_POST['record_approve']))
    {
        echo $_SESSION['user_id']; //Session does not echo here
        $ulog = $_SESSION['user_id'];
        $tablename_cc = "cc_".$ulog;
        $tablename_db = "db_".$ulog;
        $tablename_misc = "misc_".$ulog;
        $tablename_cash = "cash_".$ulog;

    }

    //unset($_SESSION['user_id']);
    //session_destroy();
?>

</body>
</html>
<!--/raw-->

编辑:我已经注释掉了未设置的语句,并尝试将它们放在if语句中,而不会改变代码的行为。

4 个答案:

答案 0 :(得分:0)

每次运行代码时都要调用unset($ _ SESSION ['user_id']);这是因为它不在你的IF语句中,你在错误的地方有一个大括号。

<?php

    if(isset($_POST['record_approve']))
    {
        echo $_SESSION['user_id']; //Session does not echo here
        $ulog = $_SESSION['user_id'];
        $tablename_cc = "cc_".$ulog;
        $tablename_db = "db_".$ulog;
        $tablename_misc = "misc_".$ulog;
        $tablename_cash = "cash_".$ulog;

    unset($_SESSION['user_id']);
    session_destroy();

    } //moved curly brace here

?>
编辑:代码运行正常,我必须注释掉include行和使用的函数,故障必须在config.php中。你是否在该文件的顶部有一个session_start()并且没有使用过unsets?

答案 1 :(得分:0)

这是一个简单的会话脚本,你有这个问题吗? 如果是这样,那么php就会出现问题。

<?php
session_start();

$_SESSION['testing'] = "boo";
echo "Session 1=" . $_SESSION['testing'];
?>

<form action="session1.php" method="post">
<input type="text" name="input"
<input type="submit" />
</form>
<pre>

<?php

if (isset($_POST['input']))
{
   print_r ($_SESSION);
   print_r ($_POST);
}

?>

答案 2 :(得分:0)

似乎我或其他任何人都无法找到正在发生的事情的逻辑解决方案。我决定简单地删除会话变量并包含一个'隐藏'输入字段,它只是通过POST变量发送变量。这似乎解决了我的所有问题,而不必担心会话变量的行为。

答案 3 :(得分:-1)

仅在提交第一个表单(isset($_POST['user_submit']))时设置会话值。当脚本正在处理第二个表单提交(isset($_POST['record_approve']))时,不会设置任何会话值。因此没有输出。

你确实意识到,即使脚本在一个PHP文件中,它也会被两个互斥的表单提交触发,对吧?因此会话值仅在isset($_POST['user_submit']之后可用。因此,如果您在提交第一个表单后提交第二个表单,则会有一个会话变量'user_id',前提是您已注释掉未设置并销毁会话的行。

希望它有意义。