一些会话变量在ajax请求中消失

时间:2011-07-26 01:02:17

标签: php

好的,我有以下几页。它们获取用户信息,并将它们放入php会话变量中,以便最终启用ajax的页面可以使用它们。问题是服务器只能使用其中一些会话变量。

这是流程

input.php => input2.php,
input2.php => control.php,
control.php calls ajax requests to updateAjax.php

input2.php://获取文件名并放入会话

    <?php
        session_start();
        header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
        header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
    ?>
    <?php
        $_SESSION = array();
        $_SESSION['file'] = $_FILES['file']['name'];
        mkdir("/blend/". $_FILES['file']['name']);
        mkdir("/blend/" . $_FILES['file']['name'] . "/frames");
        move_uploaded_file($_FILES["file"]["tmp_name"], "/blend/". $_SESSION['file'] . "/scene.blend");
    ?>

control.php //从4ms获取用户输入并将其输入会话变量

    <?php
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
    session_start();
    ?>
    <?php
        $_SESSION['endFrame'] = $_POST['frameEnd'] - 0;
        $_SESSION['format'] = $_POST['format'];
        $_SESSION['currFrame'] = $_POST['frameStart'] - 1;
    ?>

当我使用var_dump来检查会话中的变量时,在调用updateAjax.php之前一切都很好

updateAjax.php

        <?php
        header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
        header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
        session_start();
        ?>
        <?php
            /*for blender internal render engine*/
            init();

            function init() {
                sendInfo();
            }

            function sendInfo() {
                $output = array();
                $output['status'] = $_SESSION['file'];
                $output['currFrame'] = $_SESSION['currFrame']; //Var is -1!
                $output['lastFrame'] = $_SESSION['endFrame']; //var is 0!
                echo json_encode($output);
            }
    ?>

输出['lastframe']和currframe分别等于0和-1,无论你在前几页中实际放入什么。会话[文件]但是正确...

总结一下:

  1. 转到input.php并上传文件
  2. 会话['文件']可用;
  3. 转到input2.php
  4. session ['currframe'],endframe和format是正确的
  5. 转到control.php
  6. 所有会话变量都可用
  7. updateAjax.php只能访问会话['文件'],而不能访问任何其他
  8. 我的问题可能是什么想法? 感谢您帮助我:),并询问您是否需要更多信息,感到很乐意提供帮助

1 个答案:

答案 0 :(得分:0)

control.phpupdateAjax.php中,您无法在致电session_start()之前发送标头。颠倒这些的顺序:

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
session_start();
?>

// Should be
<?php
session_start();
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>

PHP应该发出警告。检查Web服务器错误日志。