ajax 处理程序(php 脚本)中的会话变量不可用

Session variable unavailable in ajax handler ( php script )

我的目录结构如下所示:

public_html
    |_ ajax
        |_ test_handler.php
    |_ test.php

我的 test.php 看起来像这样:

session_start();
if(isset($_SESSION["tested"]) && $_SESSION["tested"] == "NO"){
    //unset the session array and destroy current session
    destroyActiveSession();

    //start a new session
    session_start();

    $_SESSION["test_var"] = "Hello world!"
    $_SESSION["tested"] = "YES"
}

test_handler.php 有以下代码(简化):

session_start();
exit($_SESSION["test_var"]);

使用本地环境(XAMPP)并在 google crome

上执行

test.php 页面 $_SESSION["test_var"] 中工作正常,但在 test_handler.php 中出现 Undefined index: test_var 错误。我做错了什么???

您的 "If" 条件似乎有误:$_SESSION["tested"] = "NO"

尝试:

session_start();
if(isset($_SESSION["tested"]) && $_SESSION["tested"] == "NO"){
    //unset the session array and destroy current session
    destroyActiveSession();

    //start a new session
    session_start();

    $_SESSION["test_var"] = "Hello world!"
    $_SESSION["tested"] = "YES"
}

我看你需要先设置这个值,以确保逻辑测试正常运行

<?php
    #test.php

    session_start();
    /*
        In the original code the session variable was not set before 
        any form of testing.. set an initial value
    */
    if( !isset( $_SESSION["tested"] ) ) $_SESSION["tested"]='NO';


    if( isset( $_SESSION["tested"] ) && $_SESSION["tested"] == "NO" ){
        destroyActiveSession();

        session_start();

        $_SESSION["test_var"] = "Hello world!"
        $_SESSION["tested"] = "YES"
    }
?>

并且在尝试通过 ajax

延迟输出值时进行测试是有意义的
<?php
    #test_handler.php
    session_start();
    $var=isset( $_SESSION["test_var"] ) ? $_SESSION["test_var"] : 'bogus';
    exit( $var );
?>

所以如果有人 运行 遇到这个问题,下面是解决我的问题的方法: 新 test.php:

session_start();
if(isset($_SESSION["tested"]) && $_SESSION["tested"] == "NO"){

    //unset the session array 
    $_SESSION = array();

    $_SESSION["test_var"] = "Hello world!"
    $_SESSION["tested"] = "YES"
}

和新的 test_handler.php :

<?php
    session_start();
    exit( $_SESSION["test_var"] );
?>