【问题标题】:Some session variables disappear in ajax request一些会话变量在 ajax 请求中消失
【发布时间】:2011-07-26 01:02:16
【问题描述】:

好的,我有以下一组页面。他们获取用户信息,并将它们放入 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 //从fourms获取用户输入并输入到会话变量中

    <?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 检查会话中的 var 时,在调用 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);
            }
    ?>

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

总结一下:

  1. 转到 input.php 并上传您的文件
  2. session['file'] 可用;
  3. 转到 input2.php
  4. session['currframe']、endframe 和格式正确
  5. 转到 control.php
  6. 所有会话变量都可用
  7. updateAjax.php 只能访问 session['file'],不能访问其他任何人

对我的问题可能有什么想法? 感谢您帮助我:),并询问您是否需要更多信息,很乐意提供帮助

【问题讨论】:

    标签: php


    【解决方案1】:

    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 应该对此发出警告。检查您的网络服务器错误日志。

    【讨论】:

    • 虽然它仍然没有解决我的主要问题:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2016-02-02
    • 2019-06-09
    • 1970-01-01
    • 2015-02-23
    • 2012-09-02
    相关资源
    最近更新 更多